【问题标题】:Binary Search ending in an infinite while loop以无限 while 循环结束的二分搜索
【发布时间】:2021-09-21 16:16:25
【问题描述】:

我正在尝试调试我为运行二进制搜索而编写的一堆代码。出于某种原因,它以无限的while循环结束,我无法弄清楚为什么。有人可以帮我解决这个问题。

public class BinarySearch {
        public static int doBinarySearch(int[] arr, int target){
            int start = 0;
            int end = arr.length - 1;
            int mid = start + (end - start)/2;
            while(start <= end){
                if(target == arr[mid])
                {
                    return mid;
                }
                else if(target < arr[mid])
                {
                    end = mid - 1;
                }
                else if(target > arr[mid])
                {
                    start = mid + 1;
                }
            }
            return -1;
        }

        
        public static void main(String[] args){
            
            int[] array = {2,3,4,5,6,7,8,9};
            int target = 3;
            int answer = doBinarySearch(array, target);
            System.out.println(answer);
            
        }
    }

【问题讨论】:

  • 循环播放时您永远不会更新mid
  • 另外,您最好使用 ide 调试模式通过跟踪执行过程来跟踪此类错误

标签: java binary-search


【解决方案1】:
public class BinarySearch {
        public static int doBinarySearch(int[] arr, int target){
            int start = 0;
            int end = arr.length - 1;
           
            while(start <= end){
               int mid = start + (end - start)/2; // Mid should update inside loop
                if(target == arr[mid])
                {
                    return mid;
                }
                else if(target < arr[mid])
                {
                    end = mid - 1;
                }
                else if(target > arr[mid])
                {
                    start = mid + 1;
                }
            }
            return -1;
        }

        
        public static void main(String[] args){
            
            int[] array = {2,3,4,5,6,7,8,9};
            int target = 3;
            int answer = doBinarySearch(array, target);
            System.out.println(answer);
            
        }
    }

【讨论】:

    【解决方案2】:

    我想我得到了答案。 Middle 应该在 while 循环中动态计算。现在发生的情况是 start 和 end 值发生了变化,但 middle 的值保持不变。

    【讨论】:

    • 检查我的回答,如果对你有帮助,标记为接受
    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 2013-09-30
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    相关资源
    最近更新 更多