Alguien me dijo una vez que todo lo importante en informática se reduce a árboles. Literalmente, sólo árboles. Podemos usarlos para construir cosas, parsear cosas e interpretar cosas (sí, puede que haya algún tipo de presagio aquí, no te preocupes si no tiene ningún sentido para ti todavía, porque pronto lo tendrá). E incluso podemos utilizarlas para -¡adivinaste! – ordenar cosas.
Ah, ordenar. Hemos hecho mucho en las últimas semanas, pero ahora estamos llegando al final de nuestras aventuras de clasificación. Sin embargo, es imposible e injusto hablar de la ordenación sin hablar de un tipo especial de ordenación que utiliza la estructura de datos más reciente en nuestro cinturón de herramientas de estructuras de datos.
Recientemente hemos aprendido a amar los heaps, un tipo especial de árbol binario que sigue un conjunto estricto de reglas, y se utilizan para implementar cosas como colas de prioridad y trabajos en segundo plano. Pero estas no son las únicas cosas para las que los heaps son buenos. Resulta que los montones binarios se utilizan a menudo con el único propósito de ordenar eficientemente. Muchos programas se basan en la ordenación del montón ya que resulta ser una de las formas más eficientes de ordenar un array. Y ahora que sabemos lo que es un montón, podemos tratar de entender por qué funciona tan bien cuando se trata del problema de la ordenación!
Antes de sumergirnos en la ordenación por montón, vamos a asegurarnos de que tenemos los montones claros en nuestras cabezas. Recordemos que un montón no es más que un árbol binario con algunas reglas adicionales que tiene que seguir: en primer lugar, siempre debe tener una estructura de montón, donde todos los niveles del árbol binario se llenan, de izquierda a derecha, y en segundo lugar, debe ser ordenado como un montón máximo o un montón mínimo. Para los propósitos de la ordenación del montón, trataremos exclusivamente con montones máximos, donde cada nodo padre (incluyendo la raíz) es mayor o igual que el valor de sus nodos hijos.
Muy bien, vamos a responder a la pregunta del momento: ¿cómo ordenamos usando montones? Bueno, para responder a esa pregunta, primero tenemos que entender lo que es un algoritmo de ordenación en montón.
Leave a Reply