'''
Author: Dr. Justin Wyss-Gallifent -- University of Maryland
Source: https://www.math.umd.edu/~immortal/CMSC351/
'''
# In order to work with the Python array as tree nodes starting at 1,
# We create a list A[0,...,n] and ignore the 0th entry.
import random
import math
A = []
for i in range(0,10):
A.append(random.randint(0,100))
heapsize = len(A)-1;
nodecount = len(A)-1
def maxheapify(i):
leftnode = 2*i
rightnode = 2*i+1
largestnode = i
if leftnode <= heapsize and A[leftnode] > A[largestnode]:
largestnode = leftnode
if rightnode <= heapsize and A[rightnode] > A[largestnode]:
largestnode = rightnode
if largestnode != i:
temp = A[i]
A[i] = A[largestnode]
A[largestnode] = temp
maxheapify(largestnode)
def converttomaxheap():
for i in range(math.floor(heapsize/2),0,-1):
maxheapify(i)
def heapsort():
global heapsize
converttomaxheap()
print('After converttomaxheap:')
print(A[1:])
for i in range(nodecount,1,-1):
temp = A[1]
A[1] = A[i]
A[i] = temp
print('After switch:')
print(A[1:])
heapsize = heapsize - 1
maxheapify(1)
print('After maxheapify:')
print(A[1:])
print(A[1:])
heapsort()
print(A[1:])