二分查找

用于查找一段排好序的数列中,指定数的位置

逻辑很简单,判断中间索引的数列值和指定数的大小,不断减小两边区间范围,实现二分逼近

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向左边取整,不加一可能造成递归重复数列,无限循环

posted @ 2025-07-26 16:46  hardestnut  阅读(17)  评论(0)    收藏  举报