二分法查找

来源:互联网 发布:zigbee协议栈编程 编辑:程序博客网 时间:2024/06/06 21:43
简介:  使用二分法的前提条件为此数组已经做好排序。在二分搜寻法中,从数列的中间开始搜寻,如果这个数小于我们所搜寻的数,        由于数列已排序,则该数左边的数一定都小于要搜寻的对象,所以无需浪费时间在左边的数;如果搜寻的数大于所搜寻的对象,        则右边的数无需再搜寻,直接搜寻左边的数。    /**     * @param nums 待查找数组     * @num 待查找数     */    public static int search(int[] nums, int num) {        int low = 0;        int high = nums.length - 1;        while (low <= high) {            int mid = (low + high) / 2;            if (num > nums[mid]) {                low = mid + 1;            } else if (num < nums[mid]) {                high = mid - 1;            } else {                return mid;            }        }        return -1;    }    /**     * 二分查找(循环法)     *     * @param arr     * @param n     * @param low     * @param high     * @return     */    public static int search1(int[] arr, int n, int low, int high) {        int mid = (low + high) / 2;        if (n > arr[high] || n < arr[low]) {            return -1;        }        if (n > arr[mid]) {            return search1(arr, n, mid + 1, high);        }        if (arr[mid] > n) {            return search1(arr, n, low, mid - 1);        }        return mid;    }


原创粉丝点击