【发布时间】:2015-08-10 19:48:59
【问题描述】:
我需要对具有各种数据类型的链表执行二进制搜索。下面的代码将无法编译。我似乎无法让 compareTo() 工作。
这里是链表类:
public class Contributor {
private String firstName;
private String lastName;
private String country;
private String phone;
private double contribution;
private int id;}
二分查找方法如下。搜索需要使用二分法查找某个姓氏。
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)。这是因为链表几乎按照定义是非常低效的。
-
您的问题是什么?还是问题??