【问题标题】:What's wrong with this binary search? [closed]这个二分搜索有什么问题? [关闭]
【发布时间】:2013-09-28 17:59:11
【问题描述】:
public static int binsrch (int[] a, int key) {
    int low = 0;
    int high = a.length - 1;

    while (true) { 
        if (low > high) return -(low+1); 
        int mid = (low + high)/2; 
        if      (a[mid] < key)  low = mid + 1;
        else if (a[mid] > key) high = mid - 1;
        else    return mid;
}

有人可以帮忙吗?

【问题讨论】:

  • 如果你觉得完全没问题,有什么问题?
  • @codeMan 为什么不呢?
  • 绝对错误的一点是它没有编译(检查else if中的条件)
  • @codeMan 这是您的误解:循环重用相同的内存位置。在循环外声明mid 是错误的。
  • 真的吗?请启发我...我不知道。

标签: java search binary-search


【解决方案1】:

至少有两个,可能三个,我认为它有问题。

它使用(low + high)/2。如果数组非常大,加法可能会溢出到负数。如果是这样,除以 2 将导致负索引。这可以通过使用(low + high)&gt;&gt;&gt;1 来解决。

没有记录。我猜如果它在数组中找到键,它打算返回匹配索引,并且在未命中时返回负值。由于缺乏文档,我不确定否定结果应该代表什么。

根据缺少的规范,可能会有其他问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2012-04-19
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多