Heaps and
|
Here are details about heaps and the heapsort algorithm.
A[Parent(i)] >= A[i], for every node i except the root, where 1 < i && i <= heapsize.
MaxHeapify(A, i) l = LeftChild(i) r = RightChild(i) if (l <= heapsize(A) && A[l] > A[i]) largest = l else largest = i if (r <= heapsize(A) && A[r] > A[largest]) largest = r if (largest != i) { exchange(A[i], A[largest]) MaxHeapify(A, largest) }
BuildMaxHeap(A) heapsize(A) = n for (i = floor(n/2); i >= 1; i--) MaxHeapify(A, i)
Heapsort(A) BuildMaxHeap(A) for (i = n; i >= 2; i--) { exchange(A[1], A[i]) heapsize(A)-- MaxHeapify(A, 1) }
HeapExtractMax(A) if (heapsize(A) < 1) error("Heap underflow") max = A[1] A[1] = A[heapsize(A)] heapsize(A)-- MaxHeapify(A, 1) return max
HeapIncreaseKey(A, i, key) if (key < A[i]) error("New key smaller than old") A[i] = key while (i > 1 && A[Parent(i)] < A[i]) { exchange(A[i], A[Parent(i)]) i = Parent(i) }
MaxHeapInsert(A, key) heapsize(A)++ A[heapsize(A)] = -infinity HeapIncreaseKey(A, heapsize(A), key)