Heapsort initially creates a heap using the input elements. The construction of a heap of n elements takes O(n) time using a function called Build-Heap which calls the heapify function [Cormen et al., 2001]. Let A[1..n], where n = length[A], represent the heap array, i.e., an almost complete binary tree. Given a tree that is a heap except for node i, the heapify function arranges node i and its subtrees to satisfy the heap property. It can be thought of as letting the value at A[i] to successively shift down in the heap, assuming that its children are already heaps, so that the subtree rooted at index i satisfies the heap property.