二分查找
用于查找一段排好序的数列中,指定数的位置
逻辑很简单,判断中间索引的数列值和指定数的大小,不断减小两边区间范围,实现二分逼近
int bsearch(int left,int right,int a[],int target){
while(left<right){
int middle=(left+right)/2;
if(a[middle]>target)right=middle;
else if(a[middle]<target)left=middle+1;
else return middle;
}
return -1;
}
循环条件是left<right,跳出循环的时候一定是leftright,并且没有触发a[middle]target,说明没有target这个值,返回-1。
如果a[middle]>target,说明target在左边,需要缩小右边,让middle赋值给right。注意<时基本同理,但是应该把middle+1赋值给left,因为left+right/2向左边取整,不加一可能造成递归重复数列,无限循环

浙公网安备 33010602011771号