def heap_sort(the_list): max_heap = MaxHeap(the_list) for i in range(max_heap.size): max_heap.swap(0, max_heap.size - 1) max_heap.size -= 1 max_heap.max_heapify(0) return max_heap.list
class MaxPriorityQueues: def __init__(self, lst, k): self.heap = MaxHeap(lst) self.heap.build_max_heap() self.k = k def heap_max(self): return self.heap.elems[0] def extract_max(self): if self.k < 1: return None val = self.heap.elems[0] self.k -= 1 self.heap.elems[0] = self.heap.elems[self.k] self.heap.max_heapify(0) return val def increase_key(self, i, key): pass def insert(self, key): self.k += 1 if self.k >= self.heap.n: self.heap.elems.append(key) self.heap.n += 1 else: self.heap.elems[self.k] = key i = (self.k - 1) / 2 while i: self.heap.max_heapify(i) i /= 2 self.heap.max_heapify(0)