循环有序数组:形如{7,8,9,0,1,2,3,4,5,6}的数组。
如何快速的查找某一个元素是否在数组中呢?
追求比遍历更快的方法。。。
类似二分查找的方法:
//n:array length,若存在目标元素,返回目标在数组的位置
int search(int A[], int n, int target)
{
if(n<=0)
return -1;
int left = 0, right = n-1;
while(left<=right)
{
int mid = left + ((right-left)/2);
if(A[mid] == target)
return mid;
if(A[left] <= A[mid])//转折点在右半边,左半边是有序递增的,所以在左边采用普通的二分查找
{
if(A[left] <= target && target < A[mid])//目标元素在左边,将右边缩减到中间
right = mid - 1;
else//目标在右边,将左边缩减到中间
left = mid + 1;
}
else //转折点在左半边,类似上面的注释。
{
if(A[mid] < target && target <= A[right])
left = mid + 1;
else
right = mid - 1;
}
}
return -1;//不存在这个元素,返回-1
}