二分查找的一些思考

2020-03-21  本文已影响0人  风之旅人c

[toc]

二分查找

二分查找中常见的疑惑

二分写法通常有很多种,有的时候自己在写的时候往往会纠结与上下界、开闭区间、边界条件等等情况,接下来就对二分写法做一个整理,主要思路来源于知乎。

C++<Alogorithm>标准写法

//返回[first, last)中第一个不小于value的值的位置。
int lower_bound(int *array, int first, int last, int value)
{
    while(first < last)
    {
        int mid = first + (last - first) / 2;
        if(array[mid] < value)
            first = mid + 1;
        else last = mid;
    }
    //return last也可以,区间为空时first、last重合。
    return first;
}

Notes

严格定义二分查找定义

定义lower_bound函数:给定数组array、区间[first, last)和一个目标值value,返回区间第一个大于等于value的元素的位置。若不存在,返回last。

如何取中点

算法中取中点是这样写的:

int mid = first + (last - first) / 2; //防溢出

边界条件

参考:https://www.zhihu.com/question/36132386

上一篇 下一篇

猜你喜欢

热点阅读