#!/usr/bin/python """ A modeule containing Heap class""" def getList(): return [16, 14, 10, 8, 7, 9, 3, 2, 4, 1] def getRandomList(): import random random.seed() l = [] for i in range(10): l.append(random.choice(range(10))) return l def getLeft(index): """Get the index of left child Args: index (int), index of current node Returns: int, index of the left child """ return index*2+1 def getRight(index): """Get the index of right child Args: index (int), index of current node Returns: int, index of the right child """ return index*2+2 def maxHeapify(l, index, n): """Max heapify the tree Args: l (list), a list of objects i (int), index of current node n (int), index of the last node in the list """ # lg(n) left = getLeft(index) right = getRight(index) largest = index if left <= n and l[left] > l[index]: largest = left if right <= n and l[right] > l[largest]: largest = right if largest != index: l[largest], l[index] = l[index], l[largest] maxHeapify(l, largest, n) def buildMaxHeap(l): # nlg(n) for i in range(len(l)/2 - 1, -1, -1): maxHeapify(l, i, len(l)-1) def heapSort(l): # nlg(n) buildMaxHeap(l) print(l) for i in range(len(l)-1, 0, -1): l[0], l[i] = l[i], l[0] maxHeapify(l, 0, i-1) def main(): l = getList(); print(l) heapSort(l) print(l) l = getRandomList() print(l) heapSort(l) print(l) if __name__ == '__main__': main()