旋转有序数组的二分查找

来源:互联网 发布:java 在服务器生成pdf 编辑:程序博客网 时间:2024/04/20 14:06

将一个有序数组进行旋转,如0 1 2 4 5 6 7 -> 4 5 6 7 0 1 2,要求在旋转后的数组中查找某数,假定该数组中没有重复的数。


int find(int a[], int n, int k){    int left = 0;    int right = n-1;    while (left <= right)    {        int mid = left + (right-left)/2;        if (k == a[mid])        {            return mid;        }        if (a[left] <= a[mid])        {            if (k < a[mid] && k >= a[left])            {                right = mid - 1;            }            else            {                left = mid + 1;            }        }        else        {            if (k <= a[right] && k > a[mid])            {                left = mid + 1;            }            else            {                right = mid - 1;            }        }    }    return -1;}


进一步,要求找到旋转数组中的最小值。

int findMin(int a[], int n){    int left = 0;    int right = n - 1;    while (left < right)    {        int mid = left + (right-left)/2;        if (a[mid] < a[right])        {            right = mid;        }        else        {            left = mid + 1;        }    }    return left;}



0 0
原创粉丝点击