#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
сначала должны быть отсортированы в порядке от а до я.