为什么我的二分查找方法在目标数字没有出现在数组中时不返回-1?就陷入了循环

问题描述 投票:0回答:1
public static int binarySearch(int[] x, int target) {
        int left = 0; 
        int right = x.length - 1; 
        int mid = (right + left ) / 2; 

        
        while ( left <= right) {
            mid = (right + left) / 2; 
            
            if (x[mid] == target) {
                return mid;
            }
            
            else if (x[mid] > target) {
                right = mid--  ; 
            }
            
            else if (x[mid] < target ) {
                left = mid ++;  
            }
        }
        return -1; 
    }
    

说代码是:

` public static void main(String args[] ) { int[] myArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    System.out.println(binarySearch(myArr, 11));
}`

它永远不会打印出-1,而是进入一个循环,其中: 中:10 左:9 右:10

我该如何解决这个问题?

java binary-search
1个回答
0
投票

在我看来,使用 while 循环令人困惑。您正在尝试在数组中搜索一个值,我认为 for 循环更适合。在 while 循环中,您没有任何东西可以增加 left 的值,因此条件保持在 true 状态。

这是建议的修复方法:

public static int binarySearch(int[] x, int target) {
        int left = 0; 
        int right = x.length - 1; 
        int mid = (right + left ) / 2; 

        for (left = 0; left < x.length - 1;  left ++) {
            mid = (right + left) / 2; 
        
            if (x[mid] == target) {
                return mid;
            }
        
            else if (x[mid] > target) {
                right = mid--  ; 
            }
        
            else if (x[mid] < target ) {
                left = mid ++;  
            }
        }
        return -1;      
        }

     public static void main(String args[] ) {
         int[] myArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
         System.out.println(binarySearch(myArr, 11));
     }

此代码使用 for 循环来迭代数组 (x.length - 1) 并返回您编写的二分搜索方法的值。

© www.soinside.com 2019 - 2024. All rights reserved.