class PriorityQueue:
N # 完全二分木のノード数
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