用这种算法的耗时将大大优于顺序查找,其所需要的时间复杂度为O(logn)
代码的第一个版本如下:
/**
* @param e
* 想要查找的元素
* @param arr
* 目标数组
* @param lo
* 起始元素的下标
* @param hi
* 需要查找的规模
*
* @return 如果查找成功,则返回查找到元素的下标(多个重复元素的情况下,不确定会返回哪一个)
* 如果查找失败,则返回-1
*/
public static int editionA(int e, int[] arr, int lo, int hi) {
while (lo < hi) {
int mi = (lo + hi) / 2;
if (e == arr[mi])
return mi;
else if (e < arr[mi])
hi = mi;
else
lo = mi + 1;
}
return -1;
}
对于这种算法而言,它在最好的情况下算法只需要O(1)的时间,也就是说直接就命中将要查找的元素。如果精细的