
これは、Pascalの配列上にヒープを構築する手順の例です。
procedure siftdown(v:longint); var min,l,r:longint; begin l:=v*2; r:=v*2+1; min:=v; if (l <= s) and (a[l] < a[min]) then min:=l; if (r <= s) and (a[r] < a[min]) then min:=r; if min <> v then begin swap(a[min], a[v]); sift_down(min); end; end; procedure build; var i:longint; begin for i:=n downto 1 do siftdown(i); end;
だから、で構成される配列を与えましょう






補題。
呼び出されたときに配列のいくつかの要素をみましょう



証明:
で










数量を推定しましょう









このように

で



合計の各項の左因子を次のように推定します

ここから:

それぞれの合計を評価します。


このように




したがって、手順の操作時間

