xxxxxxxxxx
procedure heapify(arr, n, i):
largest = i
left = 2 * i + 1
right = 2 * i + 2
if left < n and arr[left] > arr[largest]:
largest = left
if right < n and arr[right] > arr[largest]:
largest = right
if largest != i:
swap(arr[i], arr[largest])
heapify(arr, n, largest)
procedure heapSort(arr):
n = length(arr)
// Build a max-heap by heapifying each non-leaf node
for i from n/2 - 1 down to 0:
heapify(arr, n, i)
// Extract elements from the heap one by one
for i from n - 1 down to 1:
swap(arr[0], arr[i])
heapify(arr, i, 0)