二分查找

来源:互联网 发布:网件 tplink 知乎 编辑:程序博客网 时间:2024/06/17 06:49

二分查找的正确性与不变式有关,只要初始化,保持,终止这三个条件满足,算法就正确。

二分查找有很多变种,这里讨论的二分查找满足如下条件:

1、如果待查找的值在数组中并且可能不止一个,返回最小的下标。

2、如果待查找的值在数组中并且可能不止一个,返回最小的下标;

3、如果待查找的值不在数组中,返回最接近的比它大的下标。

int binarysearch(int l,int r,int k){    if (k > a[r]) return r+1;    int mid;    while (l < r)    {        mid = l + (r - l) / 2;        if (a[mid] >= k)            r = mid;        else             l = mid + 1;    }    return l;}

这里的l,r是闭区间。

循环不变式满足

1、a[l] <= k <= a[r],且a[l-1] < a[l],如果k在数组中

2、k < a[r],且当l!=r时有a[l]<k,如果k不在数组中


0 0
原创粉丝点击