二分查找

对于给定的已经有序的数列,我们需要在该数列中查找是否存在某个元素的时候使用。

public static int biSearch(int []array,int a){
        int l=0;
        int r=array.length-1;
        int mid;
        while(l<=r){
            mid=l + (r-l)/2;
            if(array[mid]==a){
                return mid;
            }else if(array[mid]<a){
                lo=mid+1;
            }else{
                hi=mid-1;
            }
        }
        return -1;
    }

中点为什么是

 mid=l + (r-l)/2;

一般用mid = (l + r) / 2求中点会可能导致

1:溢出
2:求上下界会不统一

 

 mid=l + (r-l)/2通分后和上面式子是一样的,但是不会超出[].length的范围

 

 
posted @ 2022-01-23 21:19  jojo的奇妙编程  阅读(36)  评论(0)    收藏  举报