首页 笔记 图片 查字 
所属分类:其它
浏览:25
内容:

要点:
目标数组有序,
每次查找和左右下标 l,r 的中间位置m 对比是否匹配。
查找时间复杂度:O(logn)。
采用分治策略。

代码:

public class BinarySearch {
    public static void main(String[] args) {
        int[] arr = {1, 2, 4, 6, 8, 9, 10, 11, 23, 45, 67, 77, 79, 80};
        int m = search(arr, 11);
        System.out.println(m);
        m = search(arr, 12);
        System.out.println(m);
    }

    static int search(int[] arr, int v) {
        if (arr.length == 0) {
            return -1;
        }
        int l = 0;
        int r = arr.length - 1;

        while (l <= r) {
            int m = l + (r - l) / 2;
            if (arr[m] == v) {
                return m;
            } else if (arr[m] > v) {
                r = m - 1;
            } else if (arr[m] < v) {
                l = m + 1;
            }
        }
        return -1;
    }
}