2016-11-11 2 views
-2

リンクされた整数リストを作成しましたが、ソート方法はわかりませんでした。 ivがたくさん試しましたが、常に数字がリスト内にありました これは私のリンクリストに使用されたコードです!Java整数リストをソートする

import java.util.Random; 

class Node { 
Node next; 
int num; 

public Node(int val) { 
    num = val; 
    next = null; 
} 
} 

public class LinkedList { 

Node head; 

public LinkedList(int val) { 
    head = new Node(val); 
} 

public void append(int val) { 
    Node tmpNode = head; 
    while (tmpNode.next != null) { 
     tmpNode = tmpNode.next; 
    } 
    tmpNode.next = new Node(val); 
} 

public static void main(String[] args) { 
    Random rn=new Random(); 
    int min=0; 
    int max=1000; 
    LinkedList myList = new LinkedList(rn.nextInt((max - min) + 1) + min); 
    for(int i=0;i<100;i++){ 
     int x=rn.nextInt((max - min) + 1) + min; 
     myList.append(x); 
    } 
    myList.print(); 
} 
} 
+0

配列をソートするには、マージソート、クイックソート、バブルソートなど、さまざまな方法があります。あなたはそれらのいくつかを実装する方法を知っている必要があります。 Googleはあなたの友人です。 :) – BlackHatSamurai

+0

リンクされたリストを並べ替えるのは少し難解です。ランダムアクセスがないからです。標準ソートアルゴリズムを使いたい場合は、データを配列にコピーして並べ替える方がよいでしょう。 –

+0

Integersでのみ注文する場合は、LinkedListではなくTreeSetを使用することをお勧めします。 –

答えて

-1

このライン

LinkedList myList = new LinkedList(rn.nextInt((max - min) + 1) + min); 

the LinkedList APIに応じて多くの意味を作るようには見えません。そして、実際には、独自のロールアップではなく、JavaのLinkedListsを使用する必要があります。そのため、List APIとCollection APIとGenericsを利用できます。

あなたがjava.util.LinkedListを使用したらあなたはそうのように、リストを並べ替え、またはそれとコンパレータを提供するために、

myList.sort(); 

を呼びたい場合がありますことで

import java.util.Comparator; 
    import java.util.LinkedList; 

    Comparator<Integer> order = Integer::compare; 
    myList.sort(order.reversed()); 

ボリスのスパイダーのコメントにスポットがあります。これは、それがリストの配列になり、Javaの8の標準実装がLinkedListsのためにそれを行う方法である(N Nログ)Oで配列をソートしてからちょうど(n)がそれですべてのアイテムを置くOで行われます:

default void sort(Comparator<? super E> c) { //O(n log n) 
    Object[] a = this.toArray(); //O(n) 
    Arrays.sort(a, (Comparator) c); //O(n log n) 
    ListIterator<E> i = this.listIterator(); 
    for (Object e : a) { //O(n) 
     i.next();  //O(1) 
     i.set((E) e); //O(1) 
    } 
} 

ところで、あなたのコードには "print()"メソッドの実装はありません。正しい値が表示されることを確認しますか? あなたのコードにソートメソッドの実装がありません。ソート中にどのように数字が失われるのか、どうすれば分かりますか?

+0

もし私がリンクされたリストをJavaから使いたいのであれば...私は準備ができていましたが、私はそれを使用したくありません...私はこれを行うように求められました –

+0

あなたが知っているように、最初と最後の要素への参照を保存し、短い方のパスを指定すると、リストはO(n) - またはO(n/2)です。 したがって、各リストノードのすべての値を設定することは、O(n)回の操作でn回実行され、O(n²)になります。 O(n log n)ソート操作に追加されたO(n)操作であるソートされた配列から_new_リストを作成すると、O(n log n) 。上記のJDK8 Listインターフェースのソースコードはそれをしません。JDK8では、LinkedListはデフォルトのメソッドを使用します。 – Brixomatic

+0

@BoristheSpider Dang、申し訳ありませんが、あなたは正しいです、私は反復アクセスでインデックスされたアクセスと誤っています。私は答えを訂正します。 – Brixomatic

関連する問題