| index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 
|---|---|---|---|---|---|---|---|
| Value | Root | L0 | R0 | L1 | R1 | L2 | R2 | 
HEAP-SORT (A)
- BUILD-MAX-HEAP(A)
 - For i < A.length-1 downto 1
 - swap(A[0], A[i]
 - heap_size --;
 - MAX-HEAPIFY(A, 0)
 BUILD-MAX-HEAP(A)
- heap_size ← A.length-1
 - for i ← ⌊ A.length/2 ⌋ down to 0
 - MAX-HEAPIFY(A,i)
 MAX-HEAPIFY(A,i)
- l ← left(i)
 - r ← righ(i)
 - pos ← LargestPos(i, l)
 - pos ← LargestPos(pos, r)
 - If pos ≠ i
 - swap(A[i], A[pos])
 - MAX-HEAPIFY(A, pos)
 LargestPos (a,b)
- rv ← i
 - if b < heap_size
 - if(A[b] > A[i]
 - rv ← b
 - return rv