Java 使用二进制搜索查找密钥
我正试图编写一个程序,使用二进制搜索在随机生成的数字数组中查找密钥。 当密钥为0或非常高的数字时,我无法让程序找到密钥。这是一个家庭作业,但是,我碰到了一堵墙,弄不明白。提前谢谢你的帮助Java 使用二进制搜索查找密钥,java,Java,我正试图编写一个程序,使用二进制搜索在随机生成的数字数组中查找密钥。 当密钥为0或非常高的数字时,我无法让程序找到密钥。这是一个家庭作业,但是,我碰到了一堵墙,弄不明白。提前谢谢你的帮助 public static int binarySearch(int[] list, int key) { int low = 1; boolean foundKey = false; int high = list.length; int i = 0; while (
public static int binarySearch(int[] list, int key) {
int low = 1;
boolean foundKey = false;
int high = list.length;
int i = 0;
while (high >= low) {
i = i + 1;
int mid = (low + high) / 2;
if (key < list[mid]) {
high = mid - 1;
}
if (key == list[mid]) {
foundKey = true;
break;
}
low = mid + 1;
}
if (foundKey == true)
System.out.println("Key " + key + " found after " + i + " reads");
else
System.out.println("not found");
return key;
}
公共静态int二进制搜索(int[]列表,int键){
int低=1;
布尔foundKey=false;
int high=list.length;
int i=0;
而(高>=低){
i=i+1;
int mid=(低+高)/2;
如果(键<列表[mid]){
高=中-1;
}
如果(键==列表[mid]){
foundKey=true;
打破
}
低=中+1;
}
if(foundKey==true)
System.out.println(“在“+i+”读取之后找到的键“+Key+”);
其他的
System.out.println(“未找到”);
返回键;
}
需要在程序中添加两个更正
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;
}
mid=(低+高)/2;
if(mid<0 | | mid>=list.length){
打破
}
最后,正如您在问题评论部分所说,列表是一个随机数序列这不是二进制搜索算法的有效输入。输入必须按顺序排序,请阅读此二进制搜索算法。需要在程序中添加两个更正
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;
}
mid=(低+高)/2;
if(mid<0 | | mid>=list.length){
打破
}
最后,正如您在问题评论部分所说,列表是一个随机数序列这不是二进制搜索算法的有效输入。输入必须按顺序排序,请阅读此二进制搜索算法。当您说随机生成的数字时,您的意思是这些数字也是按随机顺序排列的吗?此外,如果数字是随机的,您知道列表中有零吗?int[]数组是否正确排序?是的,这些数字是按照我用于(int i=1;i