二分搜索与STL二分查找
一丶二分搜索
- 用法:搜索非递减数列中是否包含某个元素
当数据量比较大的时候,二分比线性搜索高效得多。 - 流程:查找36
- 代码实现:对象是非递减序列,如果当数据无序时,需要预先进行一次排序。
int binarysearch(int A[],int key,int n)//n为数组长度
{
int left=0,right=n,mid;
while( left < right )
{
mid=(left+right)/2;
if(key==A[mid])// 搜到了key
return 1;
if(key>A[mid])// key在右,搜索右半部分
left=mid+1;
else if(key<A[mid])// key在左,搜索左半部分
right=mid;
}
rerurn 0;//数组A[]中不存在key
- 复杂度:O(logn)
二丶STL二分查找
lower_bound:
功能:查找非递减序列[first,last) 内第一个大于或等于某个元素的位置。
(假如找到即返回该元素的地址,否则返回last地址-小心越界)
代码:返回地址减去首地址结果时数组下标
int pos=lower_bound(a+first,a+last,key)-a
upper_bound:
功能:查找非递减序列[first,last) 内第一个大于某个元素的位置。
(假如找到即返回该元素的地址,否则返回last地址-小心越界)
代码:
int pos=upper_bound(a+first,a+last,key)-a