繁体   English   中英

非递归二分查找

[英]Non-recursive binary search

我正在尝试编写这个 bSearch() 方法。 我的教授为它提供了一些伪代码; 但是,我无法弄清楚如何实现其中的一些。 我已经编写了大部分代码; 但是,我有两行仍然不太正确。 我已将我遇到困难的部分加粗。 谢谢!

private int bSearch(Item SearchItem)
{
    int low = Integer.MIN_VALUE;
    int high = Integer.MAX_VALUE;
    int foundPosition = -1;
    int middle;
    Item midPos;

    while (low <= high && **we should continue looping**)
    {
        middle = (low + high) / 2;
        midPos = MyStore.get(middle);

        if (SearchItem.equals(midPos) == true)
        {
            foundPosition = middle;
            **quit while loop**
        }
        else if (SearchItem.compareTo(middle) < midPos)
        {
            high = middle - 1;
        }
        else
        {
            low = middle + 1;
        }
    }
    return foundPosition;
}

欢迎来到 SO。 你已经有了一个不错的开始,但这里有一些建议。

  1. 您真的不需要存储foundPosition - 只需返回循环内的位置,如果未找到该项目,则返回 -1
  2. 理想情况下,您将能够从集合myStore获得下限(通常为 0)和上限。 这比使用最小和最大整数值更有意义。
  3. 您不需要将布尔值与 true 进行比较 - 只需在您的语句中使用表达式
  4. compareTo根据结果​​返回 0、负数或正数

这会给你留下类似以下的东西:

private int bSearch(Item searchItem) {
    int low = 0;
    int high = myStore.size() - 1;

    while (low <= high) {
        int middle = (low + high) / 2;
        int comparison = searchItem.compareTo(myStore.get(middle));

        if (comparison < 0) {
            low = middle + 1;
        } else if (comparison > 0) {
            high = middle - 1;
        } else {
            return middle;
        }
    }
    return -1;
}

请注意,我已将大小写和格式更改为在此站点(和其他地方)上被认为更标准的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM