Como parte de una tarea que cubre la implementación de introsort , me preguntan por qué se usa heapsort en lugar de mergesort (u otros algoritmos para el caso).
Introsort es un algoritmo de clasificación híbrido que proporciona un rendimiento promedio rápido y (asintóticamente) un rendimiento óptimo en el peor de los casos. Comienza con el ordenamiento rápido y cambia al ordenamiento dinámico cuando la profundidad de recursión excede un nivel basado en (el logaritmo de) el número de elementos que se ordenan. ( Wikipedia , recuperado 2014-mayo-06.)
La única razón por la que puedo pensar es que el montón está "en su lugar" ... Pero tbh, realmente no entiendo por qué esto sería importante aquí.
algorithms
algorithm-analysis
sorting
usuario672009
fuente
fuente
Respuestas:
Las 2 desventajas de quicksort es que requiere espacio adicional (para mantener los intervalos no ordenados) y una mala selección de pivote (o secuencias artificiales diseñadas para hacer que seleccione un pivote incorrecto) puede causar que sea un O ( n 2 ) tiempo y O ( n ) algoritmo de espacio extra.O ( logn ) O ( n2) O ( n )
Cambiar a la ordenación en grupo cuando la profundidad de recursión es demasiado grande (alrededor de ) significa que tenemos un límite superior garantizado que es O ( n log n ) tiempo y O ( log n ) espacio extra.Iniciar sesiónnorte O ( n logn ) O ( logn )
El requisito de espacio adicional de Heapsort lo convierte en una mejor opción para combinar O ( n ) donde para una matriz ideada que n aún podría ser grande.O ( 1 ) O ( n ) norte
La razón por la que no se usa el ordenamiento dinámico para la ordenación completa es porque es más lento que el ordenamiento rápido (debido en parte a las constantes ocultas en la gran expresión O y en parte al comportamiento del caché)
fuente