欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二分查找的边界值

程序员文章站 2024-03-20 10:24:58
...

lower_bound二分查找(c++)

int begin = 0,end = length;
while(begin < end){
    int mid = (end - begin) / 2 + begin; //防止溢出
    if(array[mid] < key)
        begin = mid + 1;
    else
        end = mid;
return begin; //此时begin和end指向同一个值
}

首先,类似于c++中的迭代器写法,将区间设置为左闭右开区间。

区间的设置对于while判断的取值,begin,end的赋值有着重要的影响。

将end的值设置为length时,while的判断必须写为begin<end,而不能写成begin<=end,因为end的值类似于iterator的end,只能代表终止,没有值,同时由于下面的赋值,可能存在问题,如在[2,2]中查找3。而当中点的值小于key时,对begin赋值为mid+1,是因为array[mid]已经被排除了,所以begin需要从mid+1开始算起,而end=mid也是因为array[mid]被排除而赋值为mid。

二分查找的边界值很麻烦,另外一种左闭右闭区间的方法又对while条件和begin,end的取值有不同的要求。

但是可以在当处理的数据小于5时进行顺序查找,时间类似于二分查找。

https://www.zhihu.com/people/jason-li-2-48/activities

相关标签: 笔记