二分法查找算法优化

摘要:使用位运算和减少计算次数的技巧优化二分查找算法。

在《算法——二分法查找》的二分法实现源码binarySearch_2实现中,可以发现计算了两次mid,那有没有办法计算一次呢?另一方面,位运算min + (max - min) >> 1还有其它等价实现方法吗?我带着这两个质疑写出了如下的实现方法,使代码更易读。

/**
     * 根据元素大小进行二分法查找一返回下标
     *
     * @param arr 数组
     * @param key 待匹配的值,看数组中是否存在
     * @return key 在数组中的下标,如果是-1,就说明数组中不存在此元素
     */
    public static int binarySearch_3(int[] arr, int key) {
        // 最小值的下标
        int min = 0;
        // 最大下标,等于数组长度
        int max = arr.length - 1;
        while (min <= max) {
            int mid = (max + min) >> 1;
            if (arr[mid] > key) {
                max = mid - 1;
            } else if (arr[mid] < key) {
                min = mid + 1;
            } else {
                return mid;
            }
        }
        return -1;
    }

瞧一瞧代码是否变得更简练了?老铁,你有更有效的实现策略吗?评论区等着你呢!

posted @ 2022-12-28 19:37  楼兰胡杨  阅读(190)  评论(0)    收藏  举报