Está en la página 1de 1

def heapify(arr, n, i):

largest = i # inicializar el mayor como raiz


l = 2 * i + 1 # izquierda = 2*i + 1
r = 2 * i +2 # derecha = 2*i + 2

# ver si el hijo izquierdo existe y es


# mayor que la raiz

if l < n and arr[i] < arr[l]:


largest = 1

# ver si el hijo derecho de la raiz existe y es


# mayor que la raiz

if r < n and arr[largest] < arr[r]:


largest = r

# cambiar raiz, si es necesario

if largest != i:
(arr[i], arr[largest]) = (arr[largest], arr[i]) # intercambio

# Apila la raiz

heapify(arr, n, largest)

# La funcion principal para ordenar una raiz de tamaño dado

def heapSort(arr):
n = len(arr)

# construir un maxheap.
# Dado que el ultimo padre estara en ((n//2)-1), podemos comenzar

for i in range(n // 2 - 1, -1, -1):


heapify(arr, n, i)

# Elementos extraidos uno por uno

for i in range(n - 1, 0, -1):


(arr[i], arr[0]) = (arr[0], arr[i])
heapify(arr, i, 0)

# Codigo del controlador para probar arriba

arr = [12, 11, 13, 5, 6, 7, ]


heapSort(arr)
n = len(arr)
print('la matriz ordenada es: ')
print(arr)

También podría gustarte