Irgendwie habe ich letzte Nacht über Quicksort nachgedacht und auf Wikipedia darüber gelesen. Das Interessante für mich war: „Wenn wir konsequent einen Pivot aus den mittleren 50 Prozent wählen könnten, müssten wir die Liste höchstens aufteilen. Die Wahl des Drehpunkts scheint ein mögliches Problem der Quicksortierung zu sein, das dazu führen kann Verhalten.
Meine Idee war: Wenn man in jedem Schritt den Mittelwert der Partition als Drehpunkt verwenden würde , könnte dies die Geschwindigkeit erheblich erhöhen. Insbesondere nach einigen Schritten, wenn sich Ausreißer in ihrer eigenen Aufteilung der Liste befinden, sollten Mittelwert und Median sehr nahe beieinander liegen (erneut bei großen Listen). Die zusätzliche Zeit während jedes Schritts zur Berechnung des Mittelwerts sollte betragen. Deshalb:
Quicksort geschätzte Zeit:
Quicksort_mean geschätzte Zeit:
(5/3 ist höchstwahrscheinlich eine konservative Schätzung von mir, könnte genauso gut näher an 2 liegen, da Teilmengen schnell ohne Ausreißer sein sollten). Ab etwa 10.000 Einträgen wäre Quicksort_mean also (im Durchschnitt) schneller als Quicksort. Darüber hinaus würde es niemals riskieren zu sein, da es verpflichtet ist, nicht das minimale oder maximale Element des Stapels zu nehmen.
Meine Hauptfrage ist: Habe ich etwas verpasst? Ich muss zugeben, ich habe Quicksort selbst nie implementiert, sodass ich möglicherweise andere Teile des Ganzen (Speicher usw.) verpasse.