概念:在一个有序的序列中,通过每次与中间元素比较,来缩小查找范围,找到待查找的元素位置的方法。这样每次可以过滤掉一半的数据,最坏的情况下只需要logn次(n为序列的元素总数)就能找到元素,因此二分查找的时间复杂度为:O(logn);是常用的一种效率较高的查找方法,代码如下:
const int maxn=1e6+10;
int num[maxn];
int n,m;
int Binary_Search(int key) {
int right=n-1,left=0,mid;
int index=-1;//未找到返回-1
while(left<=right) {
mid=(right+left)/2;
if(key==num[mid]) {
index=mid;
break;
}else if(key>num[mid]) {
left=mid+1;
} else {
right=mid-1;
}
}
while(index>0) {//找到元素第一次出现的位置
if(num[index-1]!=key) break;
index--;
}
return index;
}