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

简介

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

•lower_bound()
•upper_bound()
•binary_search()

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

用法

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

返回一个非递减序列 [1,n] 中的第一个大于等于值 x 的位置 (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] 中的第一个大于值 x 的位置 (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] 中是否存在值 x。(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),十分简便,缩短了代码,节约了时间,可以多多使用!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值