思想
在一个有序表中,先取中间的值,如果比要查找的值大,去左半边查;比要查找的值小去右半边查
代码
int BinarySearch(int* a, int key, int length)
{
int start, end, mid;
start = 0;
end = length - 1;
while(start <= end)
{
mid = (end + start) / 2;
if(key < a[mid])
end = mid - 1;
else if(key > a[mid])
start = mid + 1;
else
return mid;
}
return 0;
}
改进思想
当对于表比较长而且数值分布均匀的查找表来说,折半查找还可以继续改进,即mid的计算可以用mid = start + (end - start) * (key - a[start]) / (a[end] - a[start])
来代替,这个公式实际上直接根据比例来定位要查找的关键字的位置,如果要查找的表的数据极端不均匀,则这个公式未必有好的效果,这就是插值查找