欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java二分法查找(递归、循环实现)

程序员文章站 2022-10-29 14:52:43
Java二分法查找(递归、循环实现)public class BinarySearch { public static void main(String[] args) { /** * @author JadeXu * @// TODO: 2020/12/7 二分查找 * 思路: * 1、获取数组的中间值,先获取下标,方便多次查找 * 奇数位的数组直接获取中间位,偶数位的数组获取中间的第一位或...

Java二分法查找(递归、循环实现)

public class BinarySearch {
    public static void main(String[] args) {
        /**
         * @author JadeXu
         * @// TODO: 2020/12/7 二分查找
         * 思路:
         * 1、获取数组的中间值,先获取下标,方便多次查找
         * 奇数位的数组直接获取中间位,偶数位的数组获取中间的第一位或第二位都可,
         * 一般获取第一位(因为与奇数位获取中间值的方法一样)
         * 2、获取查找的区间范围,start:区间开始的下标,end:区间结束的下标
         * 3、判断查找的数和中间位的数是否相同
         * 相同时,直接返回需要的数据,跳出方法
         * 大于时,即数可能在中间值右边的区间内,此时将开始下标+1,即往后移一位,
         * 就得到了中间值右边区间的开始下标。
         * 小于时,即数可能在中间值左边的区间内,此时将结束下标-1,即往前移一位,
         * 就得到了中间值左边区间的结束下标。
         * 当一个区间里,开始下标小于等于结束下标时,该区间才是有效区间,才能继续查找。
         * 否则无效,返回找不到,跳出方法。
         */
    }
    /**
     *循环
     * @param arr 已经升序好的int[]
     * @param num 需要查找的数字
     * @return 找到则返回下标,没找到则返回-1
     */
    private static int binarySearchByCycle(int[] arr,int num) {
        int start = 0;
        int end = arr.length - 1;

        while (start <= end){
            int mid = (start + end) / 2;
            if(num == arr[mid]){
                return mid;
            }else if(num > arr[mid]){
                start += 1;
            }else {
                end -= 1;
            }
        }
        return -1;
    }

    /**
     * 递归
     * @param arr 已经升序好的int[]
     * @param num 需要查找的数字
     * @param start 区间开始下标
     * @param end 区间结束下标
     * @return 找到则返回下标,没找到则返回-1
     */
    private static int binarySearchByRecursion(int[] arr,int num,int start,int end) {
        int mid = (start + end) / 2;
        if(num == arr[mid]){
            return mid;
        }else if(num > arr[mid]){
            start += 1;
        }else {
            end -= 1;
        }
        if(start <= end && num != arr[mid]){
            mid = binarySearchByRecursion(arr,num,start,end);  //递归继续寻找
        }else {
            mid = -1;
        }
        return mid;
    }
}

本文地址:https://blog.csdn.net/qq_44089205/article/details/110825668