Мне нужно выполнить двоичный поиск в связанном списке с различными типами данных. Код ниже не будет компилироваться. Кажется, я не могу заставить compareTo() работать.Бинарный поиск строки в связанном списке
Вот связанный список класса:
public class Contributor {
private String firstName;
private String lastName;
private String country;
private String phone;
private double contribution;
private int id;}
Метод двоичного поиска ниже. Поиск должен найти определенное имя lastName, используя метод двоичного поиска.
public void binarySearch(List<Contributor> l, String key) {
System.out.println("Binary search.");
int upperBound = l.size();
int lowerBound = 1;
int midpoint = (upperBound + lowerBound)/2;
int difference = upperBound - lowerBound;
for (int i = 0; i < l.size(); i++) {
if (key.compareTo(l.get(midpoint - 1))&& difference != 1) {
upperBound = midpoint - 1;
midpoint = upperBound/2;
} else if (key.compareTo(l.get(midpoint - 1)) && difference != 1) {
lowerBound = midpoint + 1;
midpoint = (lowerBound + upperBound)/2;
} else if (key.equals(l.get(midpoint - 1))) {
midpoint = midpoint - 1;
System.out.println("We found " + key + " at position " + midpoint + " in the list.");
i = l.size();
} else {
System.out.println("We couldn't find " + key + " in the list.");
i = l.size();
}
}
}
Помните, что это будет крайне неэффективно - O (n log n), а не O (log n). Это связано с тем, что связанные списки, по определению, глубоко неэффективны. –
В чем вопрос? или проблема ?? –