Algoritmo Heap-sort Ordenamiento in -situ = no utiliza memoria adicional para realizar los ordenamientos Un heap puede ser visto como un árbol binario completo ¿Qué es un árbol binario completo? Un árbol binario tiene dos hijos como mucho, y para que sea considerado completo, todos sus niveles, hasta el penúltimo nivel están completos, y que el ultimo nivel a lo mucho esta completo de izquierda a derecha. Max heap= el mayor valor estará colocado en la raíz Min heap= el menor valor estará colocado en la raíz Para representar un árbol binario completo como un arreglo: El nodo raíz A[1] EL I-esimo nodo es A[i] El padre del nodo i es A[i/2] El hijo izquierdo del nodo i es A[2i] El hijo derecho del nodo i es A[2i+1] Propiedad heap: A[parent(i)] >= A[i] La altura de un nodo en un árbol es igual al numero de arcos de la ruta mas larga hacia una hoja La altura de un árbol = la altura de su raíz El elemento máximo de un max heap se encuentra en la raíz Un heap de n elementos tiene altura de H= 𝑙𝑜𝑔2 (𝑛 + 1) Heapify(): mantiene la propiedad del heap. Heapsort: utiliza menos memoria ya que es in situ, también usa el paradigma divide y conquistar El secreto de Quicksort es: casi no realiza intercambios de elementos innecesarios. El intercambio lleva mucho tiempo. Con Heapsort, incluso si todos sus datos ya están ordenados, intercambiará el 100% de los elementos para ordenar la matriz. Con Mergesort, es aún peor. Va a escribir el 100% de los elementos en otra matriz y volver a escribirla en la original, incluso si los datos ya están ordenados. Lo que es superior en Quicksort no es el peor de los casos, ¡sino el mejor de los casos! En el mejor de los casos, haces la misma cantidad de comparaciones, está bien, pero no cambias casi nada. En el caso medio, intercambia parte de los elementos, pero no todos, como en Heapsort y Mergesort. Eso es lo que le da a Quicksort el mejor momento. Menos intercambio, más velocidad.