这个题很简单,思想就是,指定有序的待查找数列,待查找值,设置下限low,上线high,在数列中找出中间值与待查找key值进行比较,若key大于中间值,low设置为此时的中间值下标加一,从新的low值至high继续找到中间值比较,以此类推。若key小于中间值,high为此时中间值下表减一,在新的low至high中找中间值继续比较,以此类推。
实现呢就是以下代码,这次倒没绕啥弯子,就是要注意的是,循环条件等于号不可以少,少了等于号,程序可能会进入死循环。
int halfsercah(int *arr,int len,int key)//折半查找
{
int low = 0;
int mid ;
int high = len - 1;
while (low <= high)
{
mid = (low + high) / 2;
if(key == arr[mid])
{
return mid;
}
else if(key > arr[mid])
{
low = mid + 1;
}
else if (key < arr[mid])
{
high = mid - 1;
}
}
return -1;
}