继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

算法之二分查找

慕设计6931647
关注TA
已关注
手记 54
粉丝 7189
获赞 185

二分查找只要把查找边界的定义明确,再定义好查找结束的条件。就可以很简单地理解了。

Java代码:
public class BinarySearch {

    /**
     * 查找
     * @param sortedArray 已排序好的数组
     * @param key 需要查找的key
     * @return key 所在的位置
     */
    public static <T extends Comparable<T>> int search(T[] sortedArray, T key) {
        // 在[lo..hi]范围查找
        int lo = 0, hi = sortedArray.length - 1;
        while (lo <= hi) {
            int mid = lo + (hi - lo) / 2; // 防止int越界bug
            int cmp = key.compareTo(sortedArray[mid]);
            if (cmp < 0) hi = mid - 1;
            else if (cmp > 0) lo = mid + 1;
            else return mid;
        }
        return -1; // 如果没有找到就返回-1。
    }
}

需要注意的是求mid时候的int越界问题。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP