class PriorityQueue:
A # 保存堆元素的数组
heapSize # 实际保存数据的堆的大小
insert(x):
A[heapSize++] ← x
upHeap(heapSize-1)
top():
return A[0]
extract():
val ← A[0]
A[0] ← A[heapSize-1]
heapSize--
downHeap(0)
return val
upHeap(i): # 基于插入的实现
val ← A[i]
while True:
if i ≤ 0: break
if A[parent(i)] ≥ val: break
A[i] ← A[parent(i)]
i ← parent(i)
A[i] ← val
downHeap(i): # 基于插入的实现
largest ← i
val = A[i]
while True:
if left(i) < heapSize and right(i) < heapSize:
if A[left(i)] > A[right(i)] ):
largest ← left(i)
else:
largest ← right(i)
else if left(i) < heapSize:
largest ← left(i)
else if right(i) < heapSize:
largest ← right(i)
else:
largest ← NIL
if largest = NIL : break
if A[largest] ≤ val: break
A[i] ← A[largest]
i ← largest
A[i] ← val