Binarysearch-Algorithm 代码问题
Issue with Binarysearch-Algorithm code
所以我一直在这段代码中寻找我的错误 10-20 分钟,但我仍然找不到任何错误。但是我发现(在最终添加系统输出之后)我的 "middle" Integer 出了点问题,因为它小于最低数字 (start)
感谢任何帮助!
代码如下:
public class BinaereSuche {
public static int intList[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512};
public static int bineareSuche(int number){
int start = 0;
int end = intList.length -1;
boolean found = false;
while(found == false){
int middle = (end - start) / 2;
if(number > intList[middle]){
start = middle + 1;
}else if(number < intList[middle]){
end = middle - 1;
}else
return middle;
found = true;
System.out.println(intList[start] + " <--> " + intList[end] + " => " + intList[middle]);
} return -1;
}
public static void main(String[] args) {
System.out.println(bineareSuche(32));
}
}
sysout 给我32 <--> 512 => 16
-1
其中 32 是起始编号,512 是结束编号,16 是 512 和 32 之间的中间编号,这显然是错误的。
p.s。我一直在寻找关于 SO 的答案,但仍然无法找到我的问题——如果有人对它的工作原理感到好奇(如果你还不知道):Here's a picture
我认为这行是错误的:
int middle = (end - start) / 2;
尝试:
int middle = start + (end - start) / 2;
考虑结束=10,开始=9。你的方法将计算中间=0。
所以我一直在这段代码中寻找我的错误 10-20 分钟,但我仍然找不到任何错误。但是我发现(在最终添加系统输出之后)我的 "middle" Integer 出了点问题,因为它小于最低数字 (start)
感谢任何帮助!
代码如下:
public class BinaereSuche {
public static int intList[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512};
public static int bineareSuche(int number){
int start = 0;
int end = intList.length -1;
boolean found = false;
while(found == false){
int middle = (end - start) / 2;
if(number > intList[middle]){
start = middle + 1;
}else if(number < intList[middle]){
end = middle - 1;
}else
return middle;
found = true;
System.out.println(intList[start] + " <--> " + intList[end] + " => " + intList[middle]);
} return -1;
}
public static void main(String[] args) {
System.out.println(bineareSuche(32));
}
}
sysout 给我32 <--> 512 => 16
-1
其中 32 是起始编号,512 是结束编号,16 是 512 和 32 之间的中间编号,这显然是错误的。
p.s。我一直在寻找关于 SO 的答案,但仍然无法找到我的问题——如果有人对它的工作原理感到好奇(如果你还不知道):Here's a picture
我认为这行是错误的:
int middle = (end - start) / 2;
尝试:
int middle = start + (end - start) / 2;
考虑结束=10,开始=9。你的方法将计算中间=0。