Im Rahmen einer Hausaufgabe zur Implementierung von Introsort werde ich gefragt, warum Heapsort anstelle von Mergesort (oder anderen -Algorithmen) verwendet wird.
Introsort ist ein hybrider Sortieralgorithmus, der sowohl eine schnelle Durchschnittsleistung als auch (asymptotisch) eine optimale Worst-Case-Leistung bietet. Es beginnt mit Quicksort und wechselt zu Heapsort, wenn die Rekursionstiefe eine Ebene überschreitet, die auf (dem Logarithmus von) der Anzahl der zu sortierenden Elemente basiert. ( Wikipedia , abgerufen am 06. Mai 2014)
Der einzige Grund, an den ich denken kann, ist, dass Heapsort "an Ort und Stelle" ist ... Aber ich verstehe nicht wirklich, warum dies hier wichtig sein würde.
algorithms
algorithm-analysis
sorting
user672009
quelle
quelle
Antworten:
Die 2 Nachteile von Quicksort sind, dass zusätzlichen Speicherplatz benötigt (um die unsortierten Intervalle beizubehalten) und eine schlechte Pivot-Auswahl (oder erfundene Sequenzen, mit denen Sie einen schlechten Pivot auswählen können) dazu führen kann, dass es sich um ein O ( n 2) handelt ) Zeit und O ( n ) zusätzlicher Raumalgorithmus.O ( logn ) O ( n2) O ( n )
Das Umschalten auf Heapsort, wenn die Rekursionstiefe zu groß wird (um ), bedeutet, dass wir eine garantierte Obergrenze haben, die O ( n log n ) Zeit und O ( log n ) zusätzlichen Speicherplatz ist.Logn O ( n logn ) O ( logn )
Der zusätzliche Platzbedarf von Heapsort für macht es zu einer besseren Wahl, O ( n ) für Mergsort zusammenzuführen, wenn für ein erfundenes Array n immer noch groß sein könnte.O ( 1 ) O ( n ) n
Der Grund, warum Heapsort nicht für die vollständige Sortierung verwendet wird, liegt darin, dass es langsamer als Quicksort ist (teilweise aufgrund der versteckten Konstanten im großen O-Ausdruck und teilweise aufgrund des Cache-Verhaltens).
quelle