 
 
 
 
 
 
 
 
 
 
前節の配列表現を使って, 2 分木の任意の位置から要素を落す関数 downheap() を書いてみる.
def downheap(A,K,N) {
    /* place A[K] at the correct position in A */
    while ( 2*K <= N ) {
        J = 2*K;  /* A[J] is the first child */
        if ( J == N ) {
            /* A[J] is the unique child */
            if ( A[K] < A[J] ) swap(A,K,J);
            /* A[J] is a leaf */
            break;
        } else {
            /* A[K] has two children A[J] and A[J+1] */
            /* M = max(A[K],A[J],A[J+1]) */
            M = A[K] >= A[J] ? A[K] : A[J];
            if ( A[J+1] > M ) M = A[J+1];
            if ( M == A[K] ) break; /* we have nothing to do */
            else if ( M == A[J] ) {
                swap(A,K,J);
                K = J; /* A[K] is moved to A[J]; */
            } else {
                swap(A,K,J+1);
                K = J+1; /* A[K] is moved to A[J+1]; */
            }
        }
    }
}
def swap(A,I,J) {
    T = A[I]; A[I] = A[J]; A[J] = T;
}
これは, 次のように簡潔に書ける.
def downheap(A,K,N) {
    V = A[K];
    while ( 2*K <= N ) {
        J = 2*K;
        if ( J < N && A[J] < A[J+1] ) J++;
        if ( V >= A[J] ) break;
        else {
            A[K] = A[J];
            K = J;
        }
    }
    A[K] = V;
}