In einem Standard - Algorithmen Kurs werden wir gelehrt , dass quicksort ist im Durchschnitt und im schlimmsten Fall. Gleichzeitig werden andere Sortieralgorithmen untersucht, die im schlimmsten Fall (wie Mergesort und Heapsort ) und im besten Fall sogar eine lineare Zeit (wie Bubblesort ) sind, jedoch einige zusätzliche Speicheranforderungen haben.O ( n 2 ) O ( n log n )
Nach einem kurzen Blick auf einige weitere Laufzeiten ist es selbstverständlich, dass Quicksort nicht so effizient sein sollte wie andere.
Bedenken Sie auch, dass die Schüler in grundlegenden Programmierkursen lernen, dass Rekursion im Allgemeinen nicht sehr gut ist, da sie zu viel Speicher usw. beanspruchen kann. Daher (und auch wenn dies kein wirkliches Argument ist) lässt dies den Schluss zu, dass Quicksort möglicherweise nicht geeignet ist Wirklich gut, weil es ein rekursiver Algorithmus ist.
Warum übertrifft dann Quicksort in der Praxis andere Sortieralgorithmen? Hat es mit der Struktur realer Daten zu tun ? Hat es mit der Funktionsweise des Speichers in Computern zu tun? Ich weiß, dass manche Erinnerungen viel schneller sind als andere, aber ich weiß nicht, ob dies der wahre Grund für diese kontraintuitive Leistung ist (im Vergleich zu theoretischen Schätzungen).
Update 1: Eine kanonische Antwort besagt, dass die Konstanten im des Durchschnittsfalls kleiner sind als die Konstanten in anderen -Algorithmen. Allerdings muss ich noch eine angemessene Begründung dafür finden, mit präzisen Berechnungen anstatt nur intuitiven Ideen.O ( n log n )
In jedem Fall scheint der wirkliche Unterschied, wie einige Antworten vermuten lassen, auf der Speicherebene zu liegen, wo Implementierungen die interne Struktur von Computern ausnutzen, indem zum Beispiel der Cache-Speicher schneller ist als der RAM-Speicher. Die Diskussion ist bereits interessant, aber ich würde gerne mehr Details zum Speichermanagement sehen, da es den Anschein hat, dass die Antwort damit zu tun hat.
Update 2: Es gibt mehrere Webseiten, die einen Vergleich von Sortieralgorithmen anbieten, von denen einige ausgefallener sind als andere (insbesondere sorting-algorithms.com ). Abgesehen davon, dass es sich um eine nette visuelle Hilfe handelt, beantwortet dieser Ansatz meine Frage nicht.