二分查找算法

来源:互联网 发布:如何自学数控编程3个月 编辑:程序博客网 时间:2024/05/20 04:26

                    二分查找法

                      By qianghaohao(Xqiang)

                  二分查找虽然简单,但是写的时候需要特别注意一下,

那就是mid的计算,很多人会写成这样mid = (begin + end) / 2,但

是这样写可能会出现溢出现象。具体原因在代码注释中已说明!

               代码如下:

#include <iostream>#include <vector>#include <algorithm>using namespace std;//************************************************************//            Author:qianghaohao(Xqiang)//************************************************************// 二分查找算法:// 平均查找长度:ASL=log2(n+1) - 1// 时间复杂度:  O(log(n))int BinarySearch(const vector<int> &v, int begin, int end, const int &key) {    int mid;    while (begin <= end) {        //写成这样为了防止溢出:当数组很多的时候,且begin接近        //于INF_MAX,end也接近于INF_MAX,这样如果mid写成(begin+end)/2        //由于begin+end肯定溢出,导致最终结果出现负数.所以mid写成如下形式:        //  也可以将mid声明成long long类型,避免溢出        mid = begin + (end - begin) / 2;        if (key > v[mid]) {            begin = mid + 1;        } else if (key < v[mid]) {            end = mid - 1;        } else {            return mid;        }    }    return -1;}int main(){    vector<int> v = {1, 2, 3};    cout << BinarySearch(v, 0, 2, 3) << endl;    return 0;}

0 0
原创粉丝点击