#include <stdio.h>
#include <stdlib.h>
int binary_search_in(int a[], int n, int x)
{
int left = 0;
int right = n-1;
while(left <= right)
{
int mid = left + ((right - left)>>1);
if(a[mid] == x)
return mid;
if(a[mid] >= a[left]) //左边有序
{
if(x < a[mid] && x >= a[left])
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
else //右边有序
{
if(x > a[mid] && x <= a[right])
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
}
return -1;
}
int main()
{
int a[] = {9,10,15,1,3,7};
printf("%d",binary_search_in(a, 6, 10) );
system("pause");
}
先检查mid是否相同,否则的话,mid左右至少有一个有序区域,然后在有序区域中的查找是否存在。