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