您的位置:首页 > 编程语言 > C语言/C++

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

2018-02-05 11:23 579 查看

简介

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),十分简便,缩短了代码,节约了时间,可以多多使用!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: