一 循环数组
例如 4 5 6 7 8 9 1 2 3, 循环有序
二 类似于二分查找的思想,首先定位到中间,然后判断左右两个区间,哪个是有序的(一定有一个是有序的),然后判断k是不是在这个有序区间来判断下一步在哪个区间去查找
#include <string.h>
#include <stdio.h>
//在循环数组中寻找k
int main()
{
int a[9] = {1,2,3,4,5,6,9,90,100};
int n = 9;
int l = 0;
int h = n-1;
int mid;
int k = 6;
while (l <= h)
{
mid = (l+h)/2;
printf("%d %d %d\n", l, h, mid);
if (a[mid] == k)
break;
if (a[l] < a[mid])
{
if (k < a[mid] && a[l] <= k)
h = mid-1;
else
l = mid+1;
} else
{
if (k >= a[mid+1] && k <= a[h])
l = mid+1;
else
h = mid-1;
}
}
printf("%d\n", mid);
return 0;
}