Open In App

Php Program for Check if an array is sorted and rotated

Given an array of N distinct integers. The task is to write a program to check if this array is sorted and rotated counter-clockwise. A sorted array is not considered as sorted and rotated, i.e., there should at least one rotation.
Examples
 

Input : arr[] = { 3, 4, 5, 1, 2 }
Output : YES
The above array is sorted and rotated.
Sorted array: {1, 2, 3, 4, 5}. 
Rotating this sorted array clockwise 
by 3 positions, we get: { 3, 4, 5, 1, 2}

Input: arr[] = {7, 9, 11, 12, 5}
Output: YES

Input: arr[] = {1, 2, 3}
Output: NO

Input: arr[] = {3, 4, 6, 1, 2, 5}
Output: NO

Approach
 



Below is the implementation of the above idea: 
 




<?php
// PHP program to check if an 
// array is sorted and rotated
// clockwise
  
// Function to check if an array
// is sorted and rotated clockwise
function checkIfSortRotated($arr, $n)
{
    $minEle = PHP_INT_MAX;
    $maxEle = PHP_INT_MIN;
  
    $minIndex = -1;
  
    // Find the minimum element
    // and it's index
    for ($i = 0; $i <$n; $i++) 
    {
        if ($arr[$i] < $minEle
        {
            $minEle = $arr[$i];
            $minIndex = $i;
        }
    }
  
    $flag1 = 1;
  
    // Check if all elements before 
    // minIndex are in increasing order
    for ( $i = 1; $i <$minIndex; $i++) 
    {
        if ($arr[$i] < $arr[$i - 1]) 
        {
            $flag1 = 0;
            break;
        }
    }
  
    $flag2 = 1;
  
    // Check if all elements after 
    // minIndex are in increasing order
    for ($i = $minIndex + 1; $i <$n; $i++) 
    {
        if ($arr[$i] < $arr[$i - 1]) 
        {
            $flag2 = 0;
            break;
        }
    }
  
    // Check if last element of the array
    // is smaller than the element just
    // starting element of the array
    // for arrays like [3,4,6,1,2,5] - not sorted circular array
    if ($flag1 && $flag2 && 
       ($arr[$n - 1] < $arr[0]))
        echo( "YES");
    else
        echo( "NO");
}
  
// Driver code
$arr = array(3, 4, 5, 1, 2);
  
//Function Call
$n = count($arr);
  
checkIfSortRotated($arr, $n);
  
// This code is contributed
// by inder_verma.
?>

Output

YES

Time Complexity: O(N), where N represents the size of the given array.
Auxiliary Space: O(1), no extra space is required, so it is a constant.

Please refer complete article on Check if an array is sorted and rotated for more details!


Article Tags :