二分查找只要把查找边界的定义明确,再定义好查找结束的条件。就可以很简单地理解了。
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越界问题。