| Quicksort |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{yellow}{\large \log n}$ |
No |
Partitioning |
Quicksort is usually done in-place with $\large O(\log n)$ stack space. |
| Merge sort |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n}$ |
Yes |
Merging |
Highly parallelizable (up to $\large O(\log n)$ using the Three Hungarians' Algorithm). |
| In-place merge sort |
— |
— |
$\textcolor{yellow}{\large n \log^2 n}$ |
$\textcolor{lime}{\large 1}$ |
Yes |
Merging |
Can be implemented as a stable sort based on stable in-place merging. |
| Introsort |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{yellow}{\large \log n}$ |
No |
Partitioning & Selection |
Used in several STL implementations. |
| Heapsort |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large 1}$ |
No |
Selection |
|
| Insertion sort |
$\textcolor{lime}{\large n}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{lime}{\large 1}$ |
Yes |
Insertion |
$\large O(n + d)$, in the worst case over sequences that have $d$ inversions. |
| Block sort |
$\textcolor{lime}{\large n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large 1}$ |
Yes |
Insertion & Merging |
Combine a block-based $\large O(n)$ in-place merge algorithm with a bottom-up merge sort. |
| Timsort |
$\textcolor{lime}{\large n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n}$ |
Yes |
Insertion & Merging |
Makes $n-1$ comparisons when the data is already sorted or reverse sorted. |
| Selection sort |
$\textcolor{red}{\large n^2}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{lime}{\large 1}$ |
No |
Selection |
Stable with $\large O(n)$ extra space, when using linked lists, or as a variant of Insertion Sort. |
| Shellsort |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{yellow}{\large n^{4/3}}$ |
$\textcolor{yellow}{\large n^{3/2}}$ |
$\textcolor{lime}{\large 1}$ |
No |
Insertion |
Small code size. |
| Bubble sort |
$\textcolor{lime}{\large n}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{lime}{\large 1}$ |
Yes |
Exchanging |
Tiny code size. |
| Exchange sort |
$\textcolor{red}{\large n^2}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{lime}{\large 1}$ |
Yes |
Exchanging |
Tiny code size. |
| Tree sort |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n}$ |
Yes |
Insertion |
When using a self-balancing binary search tree. |
| Cycle sort |
$\textcolor{red}{\large n^2}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{lime}{\large 1}$ |
No |
Selection |
In-place with theoretically optimal number of writes. |
| Library sort |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{lime}{\large n}$ |
No |
Insertion |
Similar to a gapped insertion sort. Random permutation needed for high-probability bounds, not stable. |
| Patience sorting |
$\textcolor{lime}{\large n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n}$ |
No |
Insertion & Selection |
Finds all the longest increasing subsequences in $\large O(n \log n)$. |
| Smoothsort |
$\textcolor{lime}{\large n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large 1}$ |
No |
Selection |
Adaptive variant of heapsort using the Leonardo sequence rather than a traditional binary heap. |
| Strand sort |
$\textcolor{lime}{\large n}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{lime}{\large n}$ |
Yes |
Selection |
|
| Tournament sort |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{lime}{\large n}$ |
No |
Selection |
Variation of Heapsort. |
| Cocktail shaker sort |
$\textcolor{lime}{\large n}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{lime}{\large 1}$ |
Yes |
Exchanging |
A variant of Bubblesort which deals well with small values at the end of the list. |
| Comb sort |
$\textcolor{lime}{\large n \log n}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{lime}{\large 1}$ |
No |
Exchanging |
Faster than bubble sort on average. |
| Gnome sort |
$\textcolor{lime}{\large n}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{lime}{\large 1}$ |
Yes |
Exchanging |
Tiny code size. |
| Odd–even sort |
$\textcolor{lime}{\large n}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{red}{\large n^2}$ |
$\textcolor{lime}{\large 1}$ |
Yes |
Exchanging |
Can be run on parallel processors easily. |