c++ 二分查找的函数 lower_bound & upper_bound & binary_search

注:本文章为转载文章,转载地址:https://blog.csdn.net/liyizhixl/article/details/53860223

C++ STL 中二分查找函数主要有这三种:

  • lower_bound()

  • upper_bound()

  • binary_search()

这三个函数都运用于有序区间。

用法

1. lower_bound(a+1,a+1+n,x)-a

返回一个非递减序列 [1,n][1,n] 中的第一个大于等于值 x的位置 (int)(int)。

程序相当于:

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

2. upper_bound(a+1,a+1+n,x)-a

返回一个非递减序列 [1,n][1,n] 中的第一个大于值 x的位置 (int)(int)。

程序相当于:

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

3. binary_search(a+1,a+1+n,x)

返回一个非递减序列 [1,n][1,n] 中是否存在值 x。(bool)(bool)。

程序相当于:

bool upper_bound()
{
    int l=1,r=n;
    while(l<r)
    {
        int mid=(l+r)/2;
        if(a[mid]>=x) r=mid; else l=mid+1;
    }
    if(a[l]==x) return true; else return false;
}

总结

这些二分查找函数时间复杂度都是 O(logn)O(logn),十分简便,缩短了代码,节约了时间,可以多多使用!!

猜你喜欢

转载自blog.csdn.net/wangws_sb/article/details/81609488