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)