I ausführen, um die unten schnelle Sortierung Haskell-Funktion (merge und Sortieralgorithmus verwendet wird):Haskell schnelle Sortierkomplexität?
qsort []=[]
qsort (x:xs) =
qsort smaller ++ [x] ++ qsort larger
where
smaller = [a | a <- xs , a<x ] -- edit
larger = [b | b <- xs , b>=x ]
Um die Laufzeit für diese eine wenig große Menge von Daten zu testen, I den folgenden Code ausführen:
qsort [100000,99999..0]
Es dauert bis jetzt 40 min und es läuft noch! Selbst eine Liste von 100.000 ist nicht so groß, also:
- Wie könnte ich mit einer Milliarde Daten umgehen?
- ist dieser Sortieralgorithmus (merge und sort) braucht weniger Zeit in anderen Sprachen wie C#, Python ... ist das ein Problem in Haskell Sprache
- Wie könnte ich die Laufzeit eines Algorithmus mit seiner Komplexität vorhersagen?
Das erste Element ist eine schreckliche Wahl der Pivot. Auch Ihre doppelte Behandlung ist völlig falsch; Alle Duplikate des Pivots gehen sowohl in "kleinere" als auch in "größere"! – user2357112
Schnelle Sortierung ist an Ort und Stelle! Das ist keine schnelle Art. – dotctor
Sie müssen auch sicherstellen, dass * alle * Vorkommen von 'x' in der Ausgabe erscheinen, wenn es kein eindeutiger Wert ist. – chepner