Sortieralgorithmen-Wettrennen
verfolge Schritt fĂŒr Schritt zwei Algorithmen im Wettrennen auf derselben Eingabe â Vergleiche, Swaps, KomplexitĂ€t
Big O ist nicht die ganze Geschichte 🖖
Bubble Sort macht im schlechtesten Fall genau n(nâ1)/2 Vergleiche â etwa 2.000 bei n=64. Jeder Durchlauf muss den gesamten verbleibenden unsortierten Bereich absuchen, ohne vorzeitig aussteigen zu können. Die Partitionierung von Quicksort setzt den Pivot an seine endgĂŒltige Position und teilt das Problem in zwei Teilprobleme; jede Rekursionsebene leistet O(n) Arbeit ĂŒber O(log n) Ebenen, macht zusammen O(n log n). Der Haken: Landet der Pivot immer an einem Ende â etwa bei sortierter Eingabe mit dem letzten Element als Pivot â verschlechtert sich die Partitionierung zu n Teilproblemen der GröĂe nâ1, nâ2, ..., die sich zu O(nÂČ) aufsummieren. Der hier verwendete Pivot in der Mitte vermeidet das, weshalb umgekehrte Eingaben schnell bleiben. Wenige unterschiedliche Werte sind der interessante Fall: Wenn viele Elemente gleich dem Pivot sind, verschwendet das Vertauschen identischer Werte Arbeit und kann in Richtung quadratisch drĂŒcken. Big O verrĂ€t dir die Wachstumsklasse; Konstanten, EingabesensitivitĂ€t und Cache-Verhalten entscheiden, welchen Algorithmus du tatsĂ€chlich einsetzt.
Warum Schritte statt Sekunden zĂ€hlen 🖖
Dieses Rennen bewertet jeden Algorithmus, indem es Vergleiche und Vertauschungen zĂ€hlt, nicht mit einer Stoppuhr. Die tatsĂ€chlich vergangene Zeit hĂ€ngt von deiner CPU, dem Browser und anderen laufenden Programmen ab, sodass derselbe Code auf verschiedenen Rechnern schnell oder langsam wirken kann. Das ZĂ€hlen von Operationen liefert ein sauberes, reproduzierbares MaĂ fĂŒr die tatsĂ€chliche Arbeit: Dieselbe Eingabe ergibt stets dieselben Werte, sodass du die Algorithmen selbst vergleichst und nicht die Hardware.
Quicksort entstand beim Russisch-Ăbersetzen 🖖
Tony Hoare erfand Quicksort 1959 als Gaststudent in Moskau, wo er an einem Projekt zur maschinellen Ăbersetzung arbeitete. Um einen russischen Satz im Wörterbuch nachzuschlagen, musste er dessen Wörter zuerst alphabetisch ordnen â und die ĂŒbliche Methode war hoffnungslos langsam. Seine Lösung, das Aufteilen um ein Pivot-Element, wurde zu einem der meistgenutzten Algorithmen ĂŒberhaupt. Die Balken, die hier um die Wette laufen, gehen auf ein Sprachproblem zurĂŒck, nicht auf ein Rechenproblem.
Beispielaufgaben
- fast sortiert - Die Eingabeverteilung verÀndert die relative Effizienz der Algorithmen.
- umgekehrt - umgekehrt sortiert
- wenige unterschiedliche Werte - wenige eindeutige Werte