网络上的代码如下:
public static int search(int[] array, int dos) {
int low = 0;
int high = array.length -1;
while ((low <= high) && (low <= array.length -1) ) {
int middle = (low + high) >> 1;
System.out.println(low+" " + high+" "+ middle);
if (array[middle] == dos) {
return dos;
}else if (array[middle] < dos) {
low = middle + 1;
}else {
high = middle - 1;
}
}
return -1;
}
思路也很简单也很容易,即使自己实现的时候出现了问题,一直出 -1 ,后来发现是while的判断条件缺少了 “=”(low <= high) && (low <= array.length -1)
(low <= high) 表示下标要小于上标,“=”是保证如果dos是在数组首位或者末尾,因为经过搜索后high会逐渐逼近low,反之亦然,当遍历到首尾数字时,没有“=”无法进入while。经过测试,如果去除此处的“=”,则首位和末尾的数字无法检索出
(low <= array.length -1) 表示 下标不能越界,表示low不能超过数组下表但是可以相等,如果没有“=”,则无法进行最后位数字的判定
本来还有个(high <= array.length -1)的条件,但是high值恒定满足的,所以删去
以上是很简单的问题,望勿粉刺