# 对元素数为 N 的数组 A 构建堆
buildHeap(A):
for i ← N/2 - 1 downto 0:
downHeap(A, i)
# 对元素数为 N 的数组 A 表示的堆的节点 i 进行向下调整堆
# 基于插入的实现
downHeap(A, i):
largest # 保存值最大的节点
cur ← i; # 当前节点
val ← A[i] # 临时保存起点的值
while True:
# 找到值最大的节点
if left(cur) < N and right(cur) < N:
# 如果有左右子节点
if A[left(cur)] > A[right(cur)]:
largest ← left(cur)
else:
largest ← right(cur)
else if left(cur) < N:
largest ← left(cur) # 如果只有左子节点
else if right(cur) < N:
largest ← right(cur) # 如果只有右子节点
else:
largest ← NIL
if largest = NIL: break # 如果 cur 为叶子节点,结束处理
if A[largest] ≤ val: break # 如果小于起点的值,结束处理
A[cur] ← A[largest]
cur ← largest # 下降到原来的大值的位置
A[cur] ← val # 将起点的值放入插入位置