【问题标题】:Binary search not return true in first iteration of while loop when target == list[mid]当 target == list[mid] 时,二分搜索在 while 循环的第一次迭代中不返回 true
【发布时间】:2019-07-23 06:36:53
【问题描述】:

我认为我是二分搜索的专家,因为我可以做到线性、递归和迭代,但我什至不能让它在 java 中工作

所以如果我将目标变量设置为等于中点,我的 if 语句会跳过它并继续执行 else if

public static void main(String[] args) {
        int[] list = { 11, 22, 33, 44, 55, 66, 77, 88, 99 };
        int target = 44;
        System.out.print(BinarySearchIterarive(list, target));

    }

    public static boolean BinarySearchIterarive(int[] list, int target) {
        int high = list.length - 1;
        int low = 0;
        while (low <= high) {
            int mid = (low + high) / 2;
            if (target == list[mid]) {
                      return true;
            } else if (target < list[mid]) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }

        }
        return false;
    }
}

它只是跳过了我的 if 语句

if (target ==list[mid])

当 list[mid] 为 44 时

【问题讨论】:

  • 与工作室调试器相比,它在执行 if 语句后不返回 true,它会继续检查 else if
  • 数组从零开始,正确的索引是3
  • 无法重现:对我来说,代码按预期工作。

标签: java arrays element binary-search


【解决方案1】:

让我们在这里做一个简单的追踪。

11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 | 99

Target: 44

第一步:high = 8, low = 0

low <= high

进入循环:mid = 4,list[4] = 55

Target < list[mid]
high = 3, low = 0

第二步:high = 3,low = 0

low <= high

进入循环:mid = 1, list[1] = 22 这里的 mid 是整数部分,计算过程中忽略了部分

Target > list[mid]

因此,low = 2high = 3

第三步:high = 3low = 2 同样,low &lt;= high,进入循环:mid = 2list[2] = 33

Target > list[mid]

因此,low = 3high = 3

最后一步:

low == high

进入循环:mid = 3list[3] = 44

Target = list[mid]
returns true

【讨论】:

    猜你喜欢
    • 2016-10-22
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 2015-10-20
    • 2023-04-07
    • 2016-06-19
    相关资源
    最近更新 更多