PHP Program to Check if it is possible to sort the array after rotating it
Last Updated :
23 Jul, 2024
Improve
Given an array of size N, the task is to determine whether its possible to sort the array or not by just one shuffle. In one shuffle, we can shift some contiguous elements from the end of the array and place it in the front of the array. For example.
A = {2, 3, 1, 2}, we can shift {1, 2} from the end of the array to the front of the array to sort it.
A = {1, 2, 3, 2} since we cannot sort it in one shuffle hence it's not possible to sort the array.
Examples:
Input: arr[] = {1, 2, 3, 4}
Output: Possible
Since this array is already sorted hence no need for shuffle.
Input: arr[] = {6, 8, 1, 2, 5}
Output: Possible
Place last three elements at the front
in the same order i.e. {1, 2, 5, 6, 8}
Approach:
- Check if the array is already sorted or not. If yes return true.
- Else start traversing the array elements until the current element is smaller than the next element. Store that index where arr[i] > arr[i+1].
- Traverse from that point and check if from that index elements are in increasing order or not.
- If above both conditions are satisfied then check if the last element is smaller than or equal to the first element of the given array.
- Print "Possible" if the above three conditions are satisfied else print "Not possible" if any of the above 3 conditions failed.
Below is the implementation of the above approach:
<?php
// PHP implementation of
// above approach
// Function to check if
// it is possible
function is_sorted($a, $n)
{
$c1 = 0; $c2 = 0;
// if array is ascending
for($i = 0; $i < $n - 1; $i++)
{
if($a[$i] <= $a[$i + 1])
$c1++;
}
// if array is descending
for($i = 1; $i < $n; $i++)
{
if($a[$i] <= $a[$i - 1])
$c2++;
}
if($c1 == $n || $c2 == $n)
return true;
return false;
}
function isPossible($a, $n)
{
// step 1
if (is_sorted($a, $n))
{
echo "Possible" . "
";
}
else
{
// break where a[i] > a[i+1]
$flag = true;
$i;
for ($i = 0; $i < $n - 1; $i++)
{
if ($a[$i] > $a[$i + 1])
{
break;
}
}
// break point + 1
$i++;
// check whether the sequence is
// further increasing or not
for ($k = $i; $k < $n - 1; $k++)
{
if ($a[$k] > $a[$k + 1])
{
$flag = false;
break;
}
}
// If not increasing after
// break point
if (!$flag)
return false;
else
{
// last element <= First element
if ($a[$n - 1] <= $a[0])
return true;
else
return false;
}
}
}
// Driver code
$arr = array( 3, 1, 2, 2, 3 );
$n = sizeof($arr);
if (isPossible($arr, $n))
echo "Possible";
else
echo "Not Possible";
// This code is contributed
// by Akanksha Rai(Abby_akku)
?>
<?php
// PHP implementation of
// above approach
// Function to check if
// it is possible
function is_sorted($a, $n)
{
$c1 = 0; $c2 = 0;
// if array is ascending
for($i = 0; $i < $n - 1; $i++)
{
if($a[$i] <= $a[$i + 1])
$c1++;
}
// if array is descending
for($i = 1; $i < $n; $i++)
{
if($a[$i] <= $a[$i - 1])
$c2++;
}
if($c1 == $n || $c2 == $n)
return true;
return false;
}
function isPossible($a, $n)
{
// step 1
if (is_sorted($a, $n))
{
echo "Possible" . "
";
}
else
{
// break where a[i] > a[i+1]
$flag = true;
$i;
for ($i = 0; $i < $n - 1; $i++)
{
if ($a[$i] > $a[$i + 1])
{
break;
}
}
// break point + 1
$i++;
// check whether the sequence is
// further increasing or not
for ($k = $i; $k < $n - 1; $k++)
{
if ($a[$k] > $a[$k + 1])
{
$flag = false;
break;
}
}
// If not increasing after
// break point
if (!$flag)
return false;
else
{
// last element <= First element
if ($a[$n - 1] <= $a[0])
return true;
else
return false;
}
}
}
// Driver code
$arr = array( 3, 1, 2, 2, 3 );
$n = sizeof($arr);
if (isPossible($arr, $n))
echo "Possible";
else
echo "Not Possible";
// This code is contributed
// by Akanksha Rai(Abby_akku)
?>
Output
Possible
Complexity Analysis:
- Time Complexity: O(n)
- Auxiliary Space: O(1)
Please refer complete article on Check if it is possible to sort the array after rotating it for more details!