【发布时间】:2014-11-05 18:18:19
【问题描述】:
我需要一些帮助,将二进制搜索方法添加到有序链表中。这是我到目前为止的代码,但我被困在这部分。我很困惑如何获取使用 insert 方法添加的值,然后搜索它,然后说出元素的位置。这是我到目前为止的程序:
import java.util.LinkedList;
class List {
public List next;
public List previous;
public long data;
public Link(long d) {
data = d;
}
public void displayLink() {
System.out.print(data + " ");
}
}
class OLinkList {
private LinkedList first;
private LinkedList last;
public OLinkList() {
first = null;
last = null;
}
public boolean isEmpty() {
return first == null;
}
public void insert(long num) {
List newLink = new List(num);
if (first == null) {
first = newLink;
last = newLink;
} else {
last.next = newLink;
last = newLink;
}
}
}
现在,我了解了二分搜索的工作原理。我怎样才能把这样的东西应用到我拥有的代码中?
public int binarySearch(int[] a, int x) {
int low = 0;
int high = a.length - 1;
while (low <= high) {
int mid = (low + high)/2;
if (a[mid] == x) return mid;
else if (a[mid] < x) low = mid + 1;
else high = mid - 1;
}
return -1;
}
【问题讨论】:
-
请注意,二进制搜索需要随机访问任意元素才能有效。在链表中情况并非如此。
-
在听取 Joey 的建议后,将您的 List 转换为数组(使用 .toArray LinkedList 方法)。使用默认的 Java binarySearch 方法 Arrays.binarySearch(请参阅:docs.oracle.com/javase/7/docs/api/java/util/Arrays.html)。注意:由于在列表上调用 toArray 需要 O(n) 这只有在之后执行多个查询时才有意义。
-
我不明白你的链表是如何排序的
标签: java binary-search