二分查找法

2016-11-23  本文已影响4人  筱南独舞

用循环实现:

public static int binarySearch(Integer[] srcArray, int des) {
    int low = 0;
    int high = srcArray.length - 1;
    while ((low <= high) && (low <= srcArray.length - 1)
                && (high <= srcArray.length -1)) {
        int middle = (high + low) >>1;
        if (des == srcArray[middle]) {
            return middle;
        } else if (des < srcArray[middle]) {
            high = middle - 1;
        } else {
            low = middle +1;
        }
    }
    return -1;
}

也可以用递归实现:

static int a[] = {1, 2, 5, 8, 7, 9};
static int k = 7; // 这里是要查找是数

public static void main(String[] s) {
    System.out.println("" + found(0, a.length-1));
}

// x、y是起始位置
public static int found(int x, int y) {
    int m = (y + x) / 2;    if (x > y) {
        return -1;
    } else {
        if (a[m] == k) return m;
        else if (a[m] > k) return found(x, m - 1);
        else return found(m + 1, y);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读