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
Beispiel #2
0
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)