二分查找及其变种

172 阅读1分钟

二分查找

public class BSearch {
    public static void main(String[] args) {
        int[] A = {1, 2, 3, 5, 6};
        int res = bSearch(A, A.length, 6);
        System.out.println(res);
        int res2 = search(A, A.length, 6);
        System.out.println(res2);
    }

    public static int bSearch(int[] a, int n, int val) {
        int low = 0;
        int high = n - 1;
        while (low <= high) {
            int middle = low + (high - low) / 2;
            if (a[middle] == val) {
                return middle;
            } else if (a[middle] < val) {
                low = middle +1;
            } else {
                high = middle - 1;
            }
        }
        return -1;
    }

    public static int search(int[] a,int n,int val){
        return _search(a ,0,n-1,val);
    }
    private static int _search(int[]a,int low,int high,int val){
        if(low>high){
            return -1;
        }
        int middle = low + (high - low) / 2;
        if(a[middle]== val){
            return middle;
        }else if(a[middle]< val){
            return _search(a,middle+1,high,val);
        }else{
            return _search(a,low,middle-1,val);
        }
    }
}

有重复值,找第一个

大于某值的第一个数

ip地址查找