手记

算法之二分查找

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

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越界问题。

0人推荐
随时随地看视频
慕课网APP