Java 有序链表上的二进制搜索
我需要一些帮助添加一个二进制搜索方法到一个有序的链表。这是我到目前为止掌握的代码,但我仍停留在这一部分。我不知道如何获取用insert方法添加的值,然后搜索它,然后说出元素的位置。以下是我迄今为止的计划:Java 有序链表上的二进制搜索,java,binary-search,Java,Binary Search,我需要一些帮助添加一个二进制搜索方法到一个有序的链表。这是我到目前为止掌握的代码,但我仍停留在这一部分。我不知道如何获取用insert方法添加的值,然后搜索它,然后说出元素的位置。以下是我迄今为止的计划: import java.util.LinkedList; class List { public List next; public List previous; public long data; public Link(long d) {
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;
}
最好使用数组,或者使用或实现自己的TreeSet类。有了数组,您就可以使用您已有的稍好一点的算法。请注意,二进制搜索需要随机访问任意元素才能有效。链接列表不是这样的。在认真听取Joey的建议后,使用.toArray LinkedList方法将列表转换为数组。使用默认的Java binarySearch方法数组。binarySearch请参阅:。注意:由于在列表上调用toArray只在以后进行多个查询时才有意义。我不明白你的linkedlist是如何排序的