Diskussion:Quicksort

message: Im Vergleich zur englischen Seite unterscheidet sich der Pseudocode der Hauptfunktion.
Die englischen Version sieht (übertragen) so aus:
funktion quicksort(links, rechts)
     falls links < rechts dann
         teiler:= teile(links, rechts)
         quicksort(links, teiler)
         quicksort(teiler+1, rechts)
     ende
 ende
Die Deutsche so:
funktion quicksort(links, rechts)
     falls links < rechts dann
         teiler:= teile(links, rechts)
         quicksort(links, teiler-1)
         quicksort(teiler+1, rechts)
     ende
 ende
Der feine Unterschied ist das "teiler-1" vs "teiler".
Das führt in der deutschen Version zu teilweise falscher Sortierung.
Die Englische scheint richtig so sein.
:-Ich denke, "teiler-1" sollte richtig sein, da der Wert an der Teilerposition schon an der richtigen Stelle ist und nicht mehr sortiert zu werden braucht. Ich finde aber auch, dass der Algorithmus nicht korrekt sortiert, z. B. bei der Zahlenfolge 4, 3, 5. Mein Vorschlag wäre, die i-Schleife bis "rechts" und nicht bis "rechts-1" laufen zu lassen. ---Stan-MS (Diskussion) 14:37, 28. Mär. 2019 (CET)
thread_title:  Fehler im Pseudocode 

message: Ich wollte meine Seite mit animierten Darstellungen von Quicksort (http://www.chrislaux.com/de/quicksort.html) für die Weblinks Sektion anbieten. Die Erklärungen sind dort alle auf Deutsch und die Animationen ergänzen den Text dieser Wikipedia-Seite gut.
--Ctlaux (Diskussion) 21:22, 3. Sep. 2019 (CEST)
replies: text: Ich sehe nicht was gegen einen Eintrag im Abschnitt Weblinks sprechen würde. Also nur zu.--Kmhkmh (Diskussion) 23:17, 3. Sep. 2019 (CEST)
thread_title:  Neuer Weblink 

message: Ich überblick' das im Moment nicht ganz, aber ich habe das Gefühl,
dass einige der Methoden, die Rekursionstiefe möglichst "garantiert"
auf O(log n) zu beschränken, als Auswirkung haben können, dass man
sich im Gegenzug wieder einhandelt, im Worst Case mit einer Laufzeit
von O(n²) dazustehen.
--arilou (Diskussion) 18:08, 26. Nov. 2020 (CET)
thread_title:  Vermeidung Speicherplatz für Rekursion 

message: Im Abschnitt Quicksort#Iteratives Quicksort heißt es: "Eine solche Liste sortiert Insertionsort in linearer Zeit". Wie kann Insertionsort für kleine Listengrößen linearen Aufwand haben? Dabei ist doch allgemeinbekannt, dass Insertionsort in \mathcal{O}( n^2 ) liegt. --141.30.247.160 21:01, 8. Feb. 2023 (CET)
replies: text: Vermutlich bezieht sich das auf bestimmte Listen (die beim Quicksort das worst case Verhalten auslösen können) und nicht auf den allgemeinen Fall. anders ausgedrückt der Quicksort erzeugt Teillisten, die der Insertionsort in linearer Zeit sortieren kann. <math>\mathcal{O}( n^2 ) ist ja nicht das Laufzeitverhalten des Insertionsorts bei jedem Datensatz, eine Liste in umgekehrter Reihenfolge sortiert der Insertionsort z.B. in linear Zeit (da er zum korrekten Einfügen immer nur einen Vergleich benötigt).--Kmhkmh (Diskussion) 14:39, 24. Feb. 2023 (CET)
thread_title:  Unverständlicher Satz 

message: Sollte es mit dem gegebenen Pseudocode nicht unmöglich sein, dass die Indizes i und j aneinander vorbeilaufen wie in den Beispielen?
Z.B. beim einbeispiel Beispiel läuft nach ein paar Schritten das i bis zum p an achter Stelle. Sagen wir mal, das sei index 8 also i = 8. Nach der Schleife, die i nach rechts laufen lässt, folgt eine, die j nach links laufen lässt. Nun ist j vom Schritt vorher bereits gleich 9. 9 ist größer als 8 und s ist größer als l, also wird j:=8 und zeigt nun genau wie das i auf's p. Jetzt ist allerdings j nicht mehr größer als i und somit endet die Schleife, ohne dass die Indizes aneinander vorbeilaufen. --77.6.72.193 10:28, 13. Mai 2023 (CEST)
replies: text: ja, die Kommentare im Code und das Beispiel darunter sind falsch, bei "links < rechts" vorausgesetzt, kann man ziemlich einfach zeigen, daß die Invariante i <= j in der großen Schleife und nach Ende der großen Schleife gilt. --195.243.100.252 13:46, 10. Jan. 2024 (CET)
thread_title:  Aneinander Vorbeilaufen der Indizes 

message: Das beschriebene Sortierverfahren im Abschnitt "Quicksort in funktionalen Sprachen" ist nicht Quicksort. Es ist kein in-place-Sortierverfahren, da neue Listen erstellt werden, die anschließend konkateniert werden. Das liegt in der Natur von funktionalen Sprachen, die ja gerade versuchen, veränderliche Zustände zu vermeiden.
Quicksort ist aber definitiv ein in-place-Verfahren, was bereits im ersten Absatz erwähnt wird: "... und dass er, abgesehen von dem für die Rekursion zusätzlichen benötigten Platz auf dem Aufruf-Stack, ohne zusätzlichen Speicherplatz auskommt."
Im Abschnitt "Speicherplatz" wird es auch nochmal explizit erwähnt: "Quicksort ist ein in-Place-Verfahren."
Meines Wissens gibt es keine einfache, funktionale Implementierung von Quicksort.
Quicksort ist zudem ein "nicht-stabiler Sortieralgorithmus". Das ist ebenfalls charakteristisch für Quicksort, er ist daher für stabiles sortieren ungeeignet. Das angegebene Haskell-Programm lässt sich jedoch leicht ändern, so dass es stabil sortiert. Dazu muss lediglich in der letzten Zeile der Vergleich beim Erzeugen der neuen Listen geändert werden (aus "<=" wird "<", aus ">" wird ">="):
quicksort (e:es) = quicksort [x | x <- es, x < e] ++ [e] ++ quicksort [x | x <- es, x >= e]
Der ganze Abschnitt gehört meines Erachtens entfernt, da er einen anderen Algorithmus beschreibt. --KamikazeJones (Diskussion) 00:29, 2. Jan. 2024 (CET)
thread_title:  Quicksort in funktionalen Sprachen in der Regel nicht in-place