| bin_min_heap_bubble_down#(n; bh, ar) {let m = n in while 2 * m + 1 < bh.size ∧ (bh.ar[2 * m + 1].key < bh.ar[m].key ∨ 2 * m + 2 < bh.size ∧ bh.ar[2 * m + 2].key < bh.ar[m].key) do let ki = bh.ar[m], ki0 = bh.ar[2 * m + 1] in if 2 * m + 2 < bh.size ∧ bh.ar[2 * m + 2].key < ki0.key then let ki1 = bh.ar[2 * m + 2] in {bh.ar[m] := ki1; ar[ki1.idx].idx := m; bh.ar[2 * m + 2] := ki; ar[ki.idx].idx := 2 * m + 2; m := 2 * m + 2} else {bh.ar[m] := ki0; ar[ki0.idx].idx := m; bh.ar[2 * m + 1] := ki; ar[ki.idx].idx := 2 * m + 1; m := 2 * m + 1} } |