二分查找算法分析

41 阅读1分钟

1.方式一


i,j位置的元素都进行比较

public static int binarySearch(int[] a,int target){
    int i=0,j=a.length-1;
    while(i<=j){
        int m=(i+j)>>>1;
        if(target<a[m]){
            j=m-1;
        }else if(a[m]<target){
            i=m+1;
        }else{
            return m;
        }
    }
    return -1;
}

2.方式二


i,j-1位置的元素都进行比较,j位置的元素不参与比较,所以j=m不是j=m-1

public static int binarySearch(int[] a,int target){
    int i=0,j=a.length;
    while(i<j){
        int m=(i+j)>>>1;
        if(target<a[m]){
            j=m;
        }else if(a[m]<target){
            i=m+1;
        }else{
            return m;
        }
    }
    return -1;
}