Wählen Sie niemals einen festen Drehpunkt - dieser kann angegriffen werden, um die O (n ^ 2) -Laufzeit Ihres Algorithmus im ungünstigsten Fall auszunutzen, die nur nach Problemen fragt. Die Worst-Case-Laufzeit von Quicksort tritt auf, wenn die Partitionierung zu einem Array mit 1 Element und einem Array mit n-1 Elementen führt. Angenommen, Sie wählen das erste Element als Partition. Wenn jemand Ihrem Algorithmus ein Array in absteigender Reihenfolge zuführt, ist Ihr erster Pivot der größte, sodass alles andere im Array links davon verschoben wird. Wenn Sie dann wiederkehren, ist das erste Element wieder das größte, also setzen Sie noch einmal alles links davon und so weiter.
Eine bessere Technik ist die Median-of-3-Methode, bei der Sie drei Elemente zufällig auswählen und die Mitte auswählen. Sie wissen, dass das Element, das Sie auswählen, nicht das erste oder das letzte ist, aber nach dem zentralen Grenzwertsatz ist die Verteilung des mittleren Elements normal, was bedeutet, dass Sie zur Mitte (und damit) tendieren , n lg n Zeit).
Wenn Sie unbedingt die O (nlgn) -Laufzeit für den Algorithmus garantieren möchten, wird die Spalten-zu-5-Methode zum Ermitteln des Medians eines Arrays in O (n) -Zeit ausgeführt, was bedeutet, dass die Wiederholungsgleichung für Quicksort im schlimmsten Fall verwendet wird sei T (n) = O (n) (finde den Median) + O (n) (Partition) + 2T (n / 2) (rekursiere links und rechts). Nach dem Hauptsatz ist dies O (n lg n) . Der konstante Faktor wird jedoch sehr groß sein. Wenn die Leistung im ungünstigsten Fall Ihr Hauptanliegen ist, verwenden Sie stattdessen eine Zusammenführungssortierung, die im Durchschnitt nur ein wenig langsamer als Quicksort ist und die O (nlgn) -Zeit garantiert (und viel schneller ist) als dieser lahme Median Quicksort).
Erklärung des Median-of-Medians-Algorithmus