简介
C++ STL 中二分查找函数主要有这三种:
lower_bound()
upper_bound()
binary_search()
这三个函数都运用于有序区间。
用法
1. lower_bound(a+1,a+1+n,x)-a
返回一个非递减序列
[1,n]
中的第一个大于等于值
x
的位置
程序相当于:
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 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 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) ,十分简便,缩短了代码,节约了时间,可以多多使用!!