您的位置:首页 > 其它

简单的二分算法分析(循环的条件)

2016-05-01 23:45 246 查看
网络上的代码如下:

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值恒定满足的,所以删去

以上是很简单的问题,望勿粉刺
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: