Clasificación piramidal

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 9 de febrero de 2020; las comprobaciones requieren 9 ediciones .

Heap sort ( ing.  Heapsort , “Heap sort” [1] ) es un algoritmo de clasificación que funciona en el peor de los casos, en promedio y en el mejor de los casos (es decir, garantizado) para operaciones de clasificación de elementos. [2] La cantidad de memoria back-end utilizada no depende del tamaño de la matriz (es decir, ).

Se puede considerar como una mejora en la clasificación de burbujas , en la que un elemento flota ( min-heap )/se hunde ( max-heap ) en muchas rutas.

Historial de creación

Heapsort fue propuesto por J. Williams en 1964. [una]

Algoritmo

Heapsort utiliza un árbol de clasificación binario . Un árbol de clasificación es un árbol que cumple las siguientes condiciones:

  1. Cada hoja tiene una profundidad de , o , que  es la profundidad máxima del árbol.
  2. El valor en cualquier vértice no es menor (la otra opción no es mayor que) el valor de sus descendientes.

Una estructura de datos conveniente para un árbol de clasificación es una matriz Arraytal que Array[0] es el elemento en la raíz y los hijos del elemento Array[i]son Array[2i+1]y Array[2i+2].

El algoritmo de clasificación constará de dos pasos principales:

1. Construya los elementos de la matriz en forma de árbol de clasificación :

en .

Este paso requiere cirugía.

2. Eliminaremos elementos de la raíz uno a la vez y reconstruiremos el árbol. Es decir, en el primer paso, intercambiamos Array[0]y Array[n-1]transformamos Array[0], Array[1], … , Array[n-2]en un árbol de clasificación. Luego reorganizamos Array[0]y Array[n-2]transformamos Array[0], Array[1], … , Array[n-3]en un árbol de clasificación. El proceso continúa hasta que solo queda un elemento en el árbol de clasificación. Entonces Array[0], Array[1], … , Array[n-1] es una sucesión ordenada.

Este paso requiere cirugía.

Ventajas y desventajas

Ventajas

Defectos

O ( n ) la ordenación por fusión que consume memoria es más rápida ( con una constante más pequeña) y no se degrada con datos incorrectos.

Debido a la complejidad del algoritmo, la ganancia se obtiene solo para n grande . En n pequeño (hasta varios miles), Shellsort es más rápido .

Aplicación

El algoritmo de "ordenación en montón" se usa activamente en el kernel de Linux .

Notas

  1. 1 2 Curso de conferencias "Tecnologías modernas de programación paralela", Conferencia No. 5: Heap sort (enlace inaccesible) . Consultado el 20 de marzo de 2009. Archivado desde el original el 15 de marzo de 2009. 
  2. ScienceDirect - Journal of Algorithms: The Analysis of Heapsort . Consultado el 30 de septiembre de 2017. Archivado desde el original el 4 de junio de 2012.

Literatura

Enlaces