# 要素数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 # 起点の値を挿入位置に戻す