What is heap sort?
Heap sort is based exclusively upon a binary heap data structure, where we find the largest element and sort it to the end of our unsorted collection. We use the properties of a complete binary tree to sort our collection efficiently.
Time and Space Complexities:
- Best Time Complexity: O(n log(n))
- Average Time Complexity: O(n log(n))
- Worst Time Complexity: O(n log(n))
- Best Space Complexity: O(1)
Prerequisites:
- Recursion
- Binary Heap
Steps to perform heap sort:
- We start by using Heapify to build a max heap of elements present in an array A.
- Once the heap is ready, the largest element will be present in the root node of the heap that is A[1].
- Now swap the element at A[1] with the last element of the array, and heapify the max heap excluding the last element.
- Repeat steps 2 and 3 till all the elements in the array are sorted.
Pseudocode:
Heapify(A as array, n as int, i as int) { max = i leftchild = 2i + 1 rightchild = 2i + 2 if (leftchild <= n) and (A[i] < A[leftchild]) max = leftchild else max = i if (rightchild <= n) and (A[max] > A[rightchild]) max = rightchild if (max != i) swap(A[i], A[max]) Heapify(A, n, max) } Heapsort(A as array) { n = length(A) for i = n/2 downto 1 Heapify(A, n ,i) for i = n downto 2 exchange A[1] with A[i] A.heapsize = A.heapsize - 1 Heapify(A, i, 0) }