Binary Search-二分查找

来源:互联网 发布:范佩西鱼跃冲顶 知乎 编辑:程序博客网 时间:2024/04/28 05:10

90%以上的程序员无法正确无误的写出二分查找代码。- Jon Bentley

很久没写二分查找的代码,刚才很不幸发现我是上述中的90%以上的程序员里的一员。有几个要注意的点:
1. 先搞清楚要查找的区间范围,这个很重要。
2. mid = low + ((high - low) >> 1)可防止溢出。

贴一下自己写的二分查找代码,警醒下:

#include <iostream>using namespace std;int binarySearch1(int a[], int x, int low, int high){    int mid;    while (low < high) {        mid = low + ((high - low) >> 1);        if (x < a[mid]) {            high = mid;        } else if (x > a[mid]) {            low = mid + 1;        } else             return mid;    }    return -1;}int binarySearch2(int a[], int x, int low, int high){    int mid;    while (low <= high) {        mid = low + ((high - low) >> 1);        if (x < a[mid])            high = mid - 1;        else if (x > a[mid])            low = mid + 1;        else             return mid;    }    return -1;}int main(){    int a[] = {1,2,3,4,6,8,10};    cout << binarySearch1(a, 4, 0, 7) << endl;    cout << binarySearch2(a, 4, 0, 6) << endl;    return 0;}

假设数组下标范围为0~n-1
对于binarySearch1而言,查找失败时low=high。对于binarySearch2而言,查找失败时low=high+1
此时low0~n之间的某个值。

0 0
原创粉丝点击