您的位置:首页 > 其它

旋转有序数组的二分查找

2015-03-01 21:13 225 查看
将一个有序数组进行旋转,如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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: