我试图编写一个程序,使用二进制搜索在随机生成的数字中找到数组中的键。 当密钥为0或非常高的数字时,我无法让程序找到密钥。这是一个家庭作业,但是,我已经撞墙了,无法弄明白。感谢您的帮助。
Zombie
答案 0 :(得分:0)
需要在程序中添加两项更正。
int low = 1;
此处应该从0
开始。所以,请int low = 0;
。设置low
变量没有条件,只有在二进制搜索算法中更改搜索方向/部分时才必须执行,因此添加以下代码
else if(key > list[mid]) {
low = mid + 1;
}
在mid
计算后添加一项检查,以确保mid
指向有效的数组索引,例如
mid = (low + high)/2;
if(mid < 0 || mid >= list.length) {
break;
}
最后,正如您所说的问题评论部分,列表是一系列随机数。 这不是二进制搜索算法的有效输入。输入必须是排序顺序,请阅读此二进制搜索算法document。