Question: Given a sorted array of n integers that has been rotated an unknown number of times, give a O(log (n)) solution that finds an element in the array?
Input: arr [] = {15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14}. Find 5 .
Output: 8 (the index of 5 in the array)
We can solve this problem in only one scan of the array as well. Please read Method 1 if you have not done so, as this forms the base of this problem.
To solve the problem in 1 scan we can apply a variation of the Binary Search technique as:-
// function to find an element in a sorted rotated array
// returns -1 if the element is not found
int binarySearchRotated(int arr[], int start, int finish, int data)
{
int mid;
// terminating condition
if(start<finish)
return -1;
mid = start + (finish - start)/2;
if(data == arr[mid])
return mid;
else if(arr[start] <= arr[mid])
{
if(data >= arr[start] && data < arr[mid])
return binarySearchRotated(arr, start, mid-1, data);
else
return binarySearchRotated(arr, mid+1, finish, data);
}
else
{
// arr[mid] < = arr[finish], finish half is in sorted order
if(data > arr[mid] && data <= arr[finish])
return binarySearchRotated(arr, mid+1, finish, data);
else
return binarySearchRotated(arr, start, mid-1, data);
}
}
