W tym celu należy budować kopiec w następujący sposób:

reszta nieposortowanych elementów małe kopce

Aby osiągnąć taką strukturę, wystarczy pierwsze n div 2 elementów tablicy (zakładając, że kopiec implementujemy w tablicy) przesunąć w dół kopca procedurą shift-down:

shift-down (T[1..n], i) k ← i repeat j ← k if 2j <= n and T[2j] > T[k] k ← 2j if 2j+1 <= n and T[2j+1] > T[k] k ← 2j+1 swap (T[j], T[k]) until j = k

Zatem procedura budująca kopiec wyglądałaby następująco:

build-heap (T[1..n]) for i ← n div 2 downto 1 shift-down (T, i)

Procedura build-heap buduje kopiec w czasie O(n).

Sortowanie Po utworzeniu kopca następuje właściwe sortowanie. Polega ono na usunięciu wierzchołka kopca, zawierającego element maksymalny (minimalny), a następnie wstawieniu w jego miejsce elementu z końca kopca i odtworzenie porządku kopcowego. W zwolnione w ten sposób miejsce, zaraz za końcem zmniejszonego kopca wstawia się usunięty element maksymalny. Operacje te powtarza się aż do wyczerpania elementów w kopcu.