java - 二分查找永远不会完成,我必须自己终止它

标签 java binary-search

public static boolean binarySearch(int[] data, int value){
    int start = 0; 
    int end = data.length-1;
    int middle = (start + end) / 2;
        while(end >= start){
            if(data[middle] == value){
                System.out.println("binarySearch found value " + value + " at position " + data[middle]);
                return true;
            }
            if(data[middle] < value){
                start = middle + 1; 
            }
            if(data[middle] > value){
                end = middle + 1; 
            }
        }
        return false;
}

我有这段用于二分搜索的代码,对我来说,一切似乎都在检查中。但是,当我传递一个数组和一个变量时,我正在通过它寻找它,它不会给我任何返回,我只需要终止它。有什么想法吗?

最佳答案

 if(data[middle] == value)

这部分检查数组的中间是否始终等于数据。如果你不修改变量middle,无论你做什么,它都会检查middle值是否等于data

由于您也没有修改 startend

 while(end >= start)

这部分还会阻止您完成循环。

这是我尝试过的:

int data[] = {1, 3, 4, 5, 7, 8, 12};
int value = 7;
binarySearch(data, value);

这是我添加时得到的输出

 System.out.println("Start: " + start +
 " Middle: " + middle + " End: " + end);

while循环的开头:

Start: 4 Middle: 3 End: 6
Start: 4 Middle: 3 End: 6
Start: 4 Middle: 3 End: 6
Start: 4 Middle: 3 End: 6
Start: 4 Middle: 3 End: 6
Start: 4 Middle: 3 End: 6
Start: 4 Middle: 3 End: 6
...

无穷大。

关于java - 二分查找永远不会完成,我必须自己终止它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24600296/

相关文章:

java - 拆分 SurfaceView - Android/Java

java - 使用 Intellij IDEA 的代码样式

java - 了解gradle.properties和java-opts

ios - 没有要搜索的对象但有条件的二进制搜索 NSArray

c++ - 二进制搜索的问题

search - 二分搜索 - 最坏/平均情况

java - Spring Data JPA - 数据库问题连接不可用,请求在 30000 毫秒后超时

java - MySQL : Access denied for user . .. 使用密码:是

java - 通过二分查找递归帮助(Java)

C# 二进制搜索变体