循环有序数组查找

来源:互联网 发布:网络上贷款需要些什么 编辑:程序博客网 时间:2024/03/29 10:10

循环有序数组:形如{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}
1 0