Skip to content
SimpleScope

Sorting

Heap sort vs Counting sort

Heap sort and Counting sort both put an array in order, in different ways. Heap sort: build a max-heap in the array, then repeatedly move the largest value to the end. Counting sort: count each value, turn the counts into positions and place the values, with no comparisons. Counting sort compares no values: it takes O(n + k), where k is the number of possible values (or digit values) and d the number of digits (radix sort), while heap sort takes O(n log n) in the worst case. Counting sort is faster only when k and d are small compared with n; heap sort makes no assumption about the values.

At a glance

PropertyHeap sortCounting sort
TechniqueBuild a max-heap in the array, then repeatedly move the largest value to the endCount each value, turn the counts into positions and place the values, with no comparisons
Compares values with each otherYesNo
Best case timeO(n log n)O(n + k)
Average case timeO(n log n)O(n + k)
Worst case timeO(n log n)O(n + k)
Extra spaceO(1)O(n + k)
Stable (equal values keep their order)NoYes
In place (no extra array)YesNo
Needs sorted inputNoNo

When to choose each

Choose heap sort when

you need a guaranteed O(n log n) time and almost no extra memory.

Avoid it when

you need a stable sort, or the fastest sort on typical data.

Choose counting sort when

the values are whole numbers in a range k that is small compared with n.

Avoid it when

the range of values is large, or the values are not whole numbers.

The same inputs, counted

These numbers come from running both real implementations: operations (comparisons plus writes, a swap counting as two writes). Counting sort makes no comparisons, so its count is writes only. It includes the k + 1 cells of the count array.

InputHeap sortCounting sort
Mixed4347
Already sorted5347
Reversed4047
Nearly sorted5047
Duplicates3647

See them run

More comparisons