二分查找

   /**
     * 二分查找循环实现
     *
     * @param key 关键字
     * @param arr 有序数组
     * @return 下标
     */
    public static int find(int key, int[] arr) {
        int lo = 0;
        int hi = arr.length - 1;
        while (lo <= hi) {
            int mid = lo + (hi - lo) / 2;
            if (key < arr[mid]) {
                hi = mid - 1;
            } else if (key > arr[mid]) {
                lo = mid + 1;
            } else {
                return arr[mid];
            }

        }
        return -1;
    }

    /**
     * 二分查找递归实现
     *
     * @param key   keyword
     * @param arr   有序数组
     * @param begin 开始索引
     * @param end   结束索引
     * @return
     */
    public static int find(int key, int[] arr, int begin, int end) {
        int mid = begin + (end - begin) / 2;
        if (begin <= end) {
            if (key == arr[mid])
                return mid;
            if (key > arr[mid])
                return find(key, arr, mid + 1, end);
            else if (key < arr[mid])
                return find(key, arr, begin, mid - 1);
        }
        return -1;
    }

  

posted @ 2019-08-17 23:56  webzom  阅读(120)  评论(0)    收藏  举报