Сложность работы со строковым двоичным поиском в java — ключ поиска не найден в списке

#java #string #search #binary #full-text-search

#java #строка #Поиск #двоичный #полнотекстовый поиск

Вопрос:

Я пытался использовать ключ поиска, чтобы получить значение в этой программе двоичного поиска. Если я помещаю «CCC» в качестве одного из элементов и пытаюсь выполнить поиск с помощью параметра search, он успешно извлекается, но когда я удаляю «CCC» из списка элементов и меняю ключ поиска на любой из других элементов, он не выдает никакого результата.

 static String[] books = {
            "Rome", "King Arthur", "The Johnson's", "Romeo and Juliet", "Hoodlums", "Baptist",
            "Rogue", "Marc Anthony", "The survivor", "Arc of Grace", "France", "Holy",
            "Mayor", "Fatality", "Immortal", "Fidelity", "The Major", "In the Hood"
    };
    static int min = 0;
    static int max = books.length - 1;
    static int mid;
    static String key = "Rome";

    public static int stringBinarySearch() {
        while (min <= max) {
            mid = (min   max) / 2;
            if (books[mid].compareTo(key) < 0) {
                min = mid   1;
            }
            else if (books[mid].compareTo(key) > 0) {
                max = mid - 1;
            } else {
                System.out.print("Book found and available at shelve ");
                return mid;
            }
        }
        System.out.println("Book not found");
        return -1;
    }

    public static void main(String[] args) {
        System.out.println(stringBinarySearch());
    }
 

Ответ №1:

Двоичный поиск требует сортировки массива.

Поскольку массив не отсортирован, вам лучше выполнить линейный поиск, или, если вы будете часто искать, отсортируйте массив (используя Arrays.sort(books) ), а затем вы можете использовать свой двоичный метод поиска.

Ответ №2:

Чтобы иметь возможность использовать алгоритм двоичного поиска, ваш набор данных должен быть отсортирован по условию поиска.

В этом примере вы сравниваете по строке books , затем books сначала должны быть отсортированы в порядке от а до я.