Хобрук: Ваш путь к мастерству в программировании

Как реализовать рекурсивный алгоритм бинарного поиска?

Мне нужно реализовать алгоритм рекурсивного бинарного поиска для целочисленного массива, отсортированного в порядке возрастания (т.е. 1,2,3,4...).

Массив, который у меня есть, содержит следующие числа:

0 0 0 0 0 0 0 1 2 2 3 3 3 3 5 6 7 7 7 9 

Однако моя текущая реализация бинарного поиска находит только числа справа от 3. По какой-то причине она не находит 9, 7, 6 и 5.

ниже мой код:

private int srchHelper(int[] array, int first, int last, int x) {
    if (first > last) return - 1;
    int mid = (first + last) / 2;
    if (array[mid] == x) {
        return mid;
    }
    if (array[mid] < x) {
        return srchHelper(array, (mid + 1), last, x);
    }
    else return srchHelper(array, (mid - 1), last, x);
}

  • Я видел этот вопрос вчера, и около 3 человек прокомментировали правильный ответ. 22.03.2016
  • Если вы хотите пойти налево, не будет ли ваш int first крайним левым вариантом (first), а не mid, и не будет ли последним mid, а не last в самом первом проходе? 22.03.2016
  • @PaulBoddington, у вас есть ссылка на этот вопрос, чтобы пометить его как дубликат? 22.03.2016
  • Этот? stackoverflow.com/questions/19012677/ 22.03.2016

Ответы:


1

Убедитесь, что вы понимаете, что делает алгоритм, а затем внимательно изучите свои рекурсивные вызовы.

21.03.2016
Новые материалы

Расистский и сексистский робот, обученный в Интернете
Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

Управление состоянием в микрофронтендах
Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

Структуры данных в C ++ - Часть 1
Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

Как я опубликовал свое первое приложение в App Store в 13 лет
Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

Что в лицо
Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

Почему шаблоны проектирования и почему нет?
Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..