int binarySearch(int list[], int key, int low, int high)
{
int mid;
while(low <= high)
{
int mid = (low + high)/2;
if (key == list[mid])
return mid;
else if(key < list[mid])
high = mid - 1;
else
low = mid + 1;
}
if (key > list[mid])
{
return mid+1;
}
else
return mid;
}
PS:list中的数组是由小到大有序存放的。
另外讨论一种错误的二分搜索法:
int binarySearch(int list[], int key, int low, int high)
{
int mid;
while(low <= high)
{
int mid = (low + high)/2;
if (key == list[mid])
return mid;
else if(key < list[mid])
high = mid - 1;
else
low = mid ;
}
if (key > list[mid])
{
return mid+1;
}
else
return mid;
}
这种情况在最后会陷入low=mid的死循环。