二分查询

话不多说 直接上代码(Coding):

/**
 * 二分查找
 * 二分查找是一种算法 在一个有序的元素列表中 查询一个元素 如果存在 则返回该元素的索引  没有则返回null
 * 比一般查询速度快 对半查询
 */
public class Demo01 {
    public static void main(String[] args) {
        // 1、定义一个有序的元素列表
        int[] numList = new int[]{1, 3, 5, 7, 9};
        // 2、输入要查询的数字
        int searchNum = 9;
        // 3、查询操作
        Integer index = searchIndex(numList, searchNum);
        if (index == null) {
            System.out.println("您要查询的数字:" + searchNum + " 不存在列表中!");
            return;
        }
        // 4、输出索引
        System.out.println("您要查询的数字:" + searchNum + " 的索引是:" + index);
    }

    /**
     * 二分查询
     *
     * @param numList
     * @param searchNum
     * @return
     */
    private static Integer searchIndex(int[] numList, int searchNum) {
        // a、定义一个最低值
        int low = 0;
        // b、定义一个最高值 列表的长度-1
        int high = numList.length - 1;
        // d、根据要查询的数字 来修改的对应的low或者high  这个查询算法是个循环 直到两个(最低超出最高的索引 才退出循环)
        while (low <= high) {
            // c、获取中间值的索引 向下取整
            int mid = (low + high) / 2;
            // 三种情况:
            if (numList[mid] == searchNum) {
                // 1、如果相等 等于中间值 那直接返回
                return mid;
            } else if (searchNum > numList[mid]) {
                // 2、猜的数字大于中间值 修改low的值 将low移动到中间去
                low = mid + 1;
            } else if (searchNum < numList[mid]) {
                // 3、猜的数字小于中间值 修改high的值 将high移动到中间去
                high = mid - 1;
            }
        }
        return null;
    }
}

 

posted @ 2023-01-29 15:31  AxeBurner  阅读(13)  评论(0编辑  收藏  举报