堆排序的应用-优先级队列
优先级队列是一种用来维护一组元素构成的集合S的数据结构,这一组元素中的每一个都有
一个关键字key。一个最大优先级队列支持以下操作:
INSERT(S, x): 把元素x插入集合S
MAXIMUM(S): 返回S中具有最大关键字的元素
EXTRACT-MAX(S): 去掉并返回S中得具有最大关键字的元素
INCREASE-KEY(S, x, k): 将元素x的关键字的值增加到k,这里k值不能小于x的原关键字的值
HEAP-MAXIMUM(A) return A[1]
HEAP-EXTRACT-MAX(A) if heap-size[A] < 1 then error "heap underflow" max ← A[1] A[1] ← A[heap-size[A]] heap-size[A] ←heap-size[A] - 1 MAX-HEAPIFY(A, 1) return max
HEAP-INCREASE-KEY(A, i, key) if key < A[i] then error "new key is smaller than current key" A[i] ← key while i > 1 and A[PARENT(i)] < A[i] do exchange A[i] ↔ A[PARENT(i)] i ← PARENT(i)
MAX-HEAP-INSERT(A, key) heap-size[A] ← heap-size[A] + 1 A[heap-size[A]] ← -∞ HEAP-INCREASE-KEY(A, heap-size[A], key)