Dans le cadre d'une affectation de devoirs couvrant la mise en œuvre de l' introsort, on me demande pourquoi le heapsort est utilisé plutôt que le mergesort (ou d'autres algorithmes d'ailleurs).
Introsort est un algorithme de tri hybride qui fournit à la fois des performances moyennes rapides et (asymptotiquement) des performances optimales dans le pire des cas. Il commence par tri rapide et passe à tri par tas lorsque la profondeur de récursivité dépasse un niveau basé sur (le logarithme de) le nombre d'éléments triés. ( Wikipedia , récupéré le 2014-mai-06.)
La seule raison pour laquelle je peux penser, c'est que l'oreillette est "en place" ... Mais je ne comprends pas vraiment pourquoi cela importerait ici.
algorithms
algorithm-analysis
sorting
user672009
la source
la source
Réponses:
Les 2 inconvénients du tri rapide sont qu'il nécessite un espace supplémentaire (pour conserver les intervalles non triés) et une mauvaise sélection de pivot (ou des séquences artificielles conçues pour vous faire sélectionner un mauvais pivot) peut en faire un O ( n 2 ) temps et O ( n ) algorithme d'espace supplémentaire.O ( logn ) O(n2) O(n)
Le passage à heapsort lorsque la profondeur de récursivité devient trop grande (autour de ) signifie que nous avons une limite supérieure garantie qui est O ( n log n ) temps et O ( log n ) espace supplémentaire.logn O(nlogn) O(logn)
La raison pour laquelle heapsort n'est pas utilisé pour le tri complet est parce qu'il est plus lent que quicksort (en partie à cause des constantes cachées dans l'expression big O et en partie au comportement du cache)
la source