Ich muss eine doppelt verknüpfte Liste mit etwas anderes als Insertion sortieren, die auch in einer besseren Zeit als O (n^2) läuft. Ich habe über einen Quicksort nachgedacht, hatte aber Probleme mit dem Verständnis des Algorithmus. Könnten Sie mich auf eine einfach zu verstehende Dokumentation hinweisen, die mir beim Einstieg helfen könnte?Implementieren eines Quicksort einer Linked List?
Antwort
Ich würde eigentlich eine merge sort empfehlen. Es fühlt sich an, als ob es mit einer doppelt verketteten Liste mehr Sinn macht, und es hat eine Laufzeit von O (n log n). Grundsätzlich finden Sie die Mitte und teilen Sie die Liste in zwei Hälften, sortieren Sie jede Hälfte von selbst, und kombinieren Sie dann die beiden in linearer Zeit.
Es gibt einen Thread here, der eine ziemlich gute funktionierende Implementierung in C++ hat, die vielleicht nicht die einfachste für Sie zu lesen ist, wenn Sie Java lernen, aber kann ein guter Ausgangspunkt sein.
Es ist auch eine ausgezeichnete hohe Beschreibung des Algorithmus bei this site.
Wichtig ist, dass die * worst case * Laufzeit im Gegensatz zu Quicksort auch 'O (n * log n) 'ist. Außerdem ist es einfach zu implementieren :) –
- 1. Implementieren Linked List-Umkehrung mit Stack
- 2. Linked-List-Klasse
- 3. Python Linked List Problem
- 4. C++ Linked List Segmentierungsfehler
- 5. Linked List-Speicher
- 6. Linked List Counter
- 7. Linked List Printing Problem
- 8. Linked List Loop Detection
- 9. Segmentierungsfehler auf Linked List-Knoten
- 10. Suchen Methode in Linked List
- 11. Circular Doubly Linked List - Segmentierungsfehler: 11
- 12. LinkedImashImaps - Verwendet Double Linked List, nicht eine einzelne Linked List; Warum
- 13. Abgerollte Linked-List-Arrays vs. Knoten
- 14. Linear Linked List - gültige/gebräuchliche Terminologie?
- 15. C++ - Lambda Länge von Linked-List
- 16. Pop von GLib single-linked list
- 17. Add-Methode für Double Linked List (Blasensortierung)
- 18. Erstellen einer tupelartigen Kompilierungszeit "Linked-List" mit Variadic-Vorlagen
- 19. Linked List Endlosschleife auf dem ersten Knoten
- 20. Generische Linked List für Delphi 2009
- 21. Komplexität der Einfügung Sortierung mit Doubly Linked List?
- 22. Laravel Verwendung der PHP-Linked-List-Implementierung SplDoublyLinkedList();
- 23. Warum "Knoten löschen" Absturz meiner C++ - Linked-List-Anwendung?
- 24. Zählen von Wörtern aus Textdatei in Linked List in C
- 25. Wie erstelle ich eine Linked-List-Datenstruktur in Java?
- 26. Warum LinkedList in Java ist keine echte Linked List?
- 27. Single Linked List in C-Wert des Parameters
- 28. Versucht, Speicherleck in meiner Linked-List-Programm zu verstehen
- 29. Bestellung einer Linked List-Struktur in einer SQL oder LINQ Query?
- 30. Randomized Quicksort
[Video von Quicksort Visualisierung Hungerian Volkstanz mit] (http://www.youtube.com/watch?v=ywWBy6J5gz8). –
Können Sie es in eine andere Datenstruktur extrahieren, um es zu sortieren, oder müssen Sie es an Ort und Stelle sortieren? Das Extrahieren in ein Array, das schnelle Sortieren und das Zurücksetzen in die verknüpfte Liste sollte etwa 2n + nlogn sein, was immer noch weniger als n Quadrat ist. – captncraig
Nein, ich kann keine andere Datenstruktur zum Speichern der Knoten verwenden. –