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

网络上的代码如下:

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

以上是很简单的问题,望勿粉刺

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值