折半查找又称二分查找,其基本思想是,在顺序存储的有序序列中要查找某个关键字,首先用有序序列的中间元素和这个关键字作比较,如果小于关键字,则在上半部分查找,如果大于关键字,则在下半部分查找,如果等于关键字,则返回。不断地重复上述步骤,直到找到要查找的关键字为止,如果所查找区域没有所查找的关键字,则查找失败,返回。
代码如下:
int Binary_Search(int *a, int n, int key)
{
int low, high, mid;
low = 1;
high = n;
while(low <=high )
{
mid = (low+high)/2;
if(key<a[mid])
high = mid -1;
else if(key > a[mid])
low = mid + 1;
else
return mid;
}
return 0;
}
验证代码如下:
int main()
{
int a[6] = {0, 1, 2, 4, 6, 7, };
cout << Binary_Search(a, 5, 4) << endl;
return 0;
}
查找算法中除了上述的二分查找算法,还有插入查找算法和斐波那契查找算法,三种查找算法本质上分隔点的选择的不同,各有优劣,实际开发时可以根据数据的特点综合考虑再进行相应的选择。
参考《大话数据结构》