← Back

Heap Sort

comparisonin-placeunstable
Press play to start
1function heapSort(arr: number[]): number[] {
2 const n = arr.length
3 for (let i = Math.floor(n/2)-1; i >= 0; i--)
4 heapify(arr, n, i)
5 for (let i = n-1; i > 0; i--) {
6 [arr[0], arr[i]] = [arr[i], arr[0]]
7 heapify(arr, i, 0)
8 }
9 return arr
10}
11function heapify(arr: number[], n: number, i: number) {
12 let largest = i
13 const l = 2*i+1, r = 2*i+2
14 if (l < n && arr[l] > arr[largest]) largest = l
15 if (r < n && arr[r] > arr[largest]) largest = r
16 if (largest !== i) {
17 [arr[i], arr[largest]] = [arr[largest], arr[i]]
18 heapify(arr, n, largest)
19 }
20}
Step 1/0
Custom array:

Complexity

Best:O(n log n)
Average:O(n log n)
Worst:O(n log n)
Space:O(1)

Description

Builds a max-heap from the array, then repeatedly extracts the maximum element and places it at the end, rebuilding the heap each time.

When to use

Guaranteed O(n log n) worst case with O(1) space. Use when worst-case performance is critical and space is constrained.