二分法查找算法优化

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

在《算法——二分法查找》的二分法实现源码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 @   楼兰胡杨  阅读(166)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示