Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有序链表上的二进制搜索_Java_Binary Search - Fatal编程技术网

Java 有序链表上的二进制搜索

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) {

我需要一些帮助添加一个二进制搜索方法到一个有序的链表。这是我到目前为止掌握的代码,但我仍停留在这一部分。我不知道如何获取用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;
   }

最好使用数组,或者使用或实现自己的TreeSet类。有了数组,您就可以使用您已有的稍好一点的算法。

请注意,二进制搜索需要随机访问任意元素才能有效。链接列表不是这样的。在认真听取Joey的建议后,使用.toArray LinkedList方法将列表转换为数组。使用默认的Java binarySearch方法数组。binarySearch请参阅:。注意:由于在列表上调用toArray只在以后进行多个查询时才有意义。我不明白你的linkedlist是如何排序的