Нерекурсивный бинарный поиск - PullRequest
0 голосов
/ 01 марта 2020

Я пытаюсь написать этот метод 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;
}

1 Ответ

0 голосов
/ 01 марта 2020

Добро пожаловать на SO. Вы неплохо начали, но вот несколько советов.

  1. вам действительно не нужно хранить foundPosition - просто верните позицию внутри l oop или -1, если элемент не найден
  2. в идеале вы могли бы получить нижний (обычно 0) и верхний диапазон из коллекции myStore. Это имеет больше смысла, чем использование минимального и максимального целочисленных значений.
  3. вам не нужно сравнивать логические значения с истинным - просто используйте выражение в своем выражении
  4. compareTo возвращает 0, отрицательное или положительный результат в зависимости от результата (и в других местах).
...