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

来源:互联网 发布:手动榨汁机好用么 知乎 编辑:程序博客网 时间:2024/06/05 19:37

简介

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),十分简便,缩短了代码,节约了时间,可以多多使用!!

1 0
原创粉丝点击