Я сделал некоторые исследования и не смог найти ничего, но если это дубликат, пожалуйста, дайте мне знать.Как реализовать бинарный поиск для массива строк?
У меня есть этот код для бинарного поиска целых
package thepac;
public class CustomBS{
public static void main(String[] args){
int[] listOfNumbers = new int[]{2,45,65,76,89,100,342,455};
int numberToSearch = 100;
int lowestIndex = 0;
int highestIndex = listOfNumbers.length-1;
int middleIndex;
while(lowestIndex<=highestIndex){
middleIndex = (lowestIndex+highestIndex)/2;
if(numberToSearch > listOfNumbers[middleIndex]){
lowestIndex = middleIndex+1;
}else if(numberToSearch < listOfNumbers[middleIndex]){
highestIndex = middleIndex-1;
}else{
break;
}
}//end of while
if(lowestIndex > highestIndex){
System.out.println("not found");
}else{
System.out.println("found");
}
}
}
Это работает просто найти, и я понимаю концепцию. Можно ли реализовать версию этого, которая ищет строки, как в массиве строк?
Я не могу придумать, как реализовать это, поскольку текущий алгоритм проверяет, является ли поиск числа более высоким или меньшим, чем средний индекс, но если это строка, то как я могу проверить, если он выше или ниже другого строка?
Я знаю, что могу использовать метод String.compareTo(), чтобы проверить, больше или меньше строки, чем другой, но я не уверен, что это будет правильный способ реализации этого.
вы имеете в виду ... как [это один] (https://docs.oracle.com/javase/8/docs/api/java/ Util/Arrays.html # BinarySearch-java.lang.Object: A-java.lang.Object-)? – Turing85
Спасибо - я знаком с этим методом, но я хочу реализовать свой собственный алгоритм, который выполняет бинарный поиск в Strings. Я не вижу внутренней реализации предложенного метода. – pgonzaleznetwork
Да, вы можете использовать метод 'String.compareTo()', если хотите написать свою собственную реализацию. – kfx