排序算法对比

主要参考 十大经典排序算法总结(JavaScript描述) 原文更详细

名称 平均复杂度 最差复杂度 最优复杂度 空间开销 是否稳定
冒泡排序 $O( n^2 )$ $O( n^2 )$ $O( n^2 )$ $O(1)
选择排序 $O( n^2 )$ $O( n^2 )$ $O( n^2 )$ $O(1)
插入排序 $O( n^2 )$ $O( n^2 )$ $O( n^2 )$ $O(1)
希尔排序 $O( n\log(n) )$ $O( n^2 )$ $O( n\log_2n )$ $O(1)
快速排序 $O( n\log(n) )$ $O( n^2 )$ $O( n\log(n) )$ $O(1)
归并排序 $O( n\log(n) )$ $O( n\log(n) )$ $O( n\log(n) )$ $O(1)
堆排序 $O( n\log(n) )$ $O( n\log(n) )$ $O( n\log(n) )$ $O(1)
计数排序 $O( n + k )$ $O( n + k )$ $O( n + k )$ $O(1)
基数排序 $O( n * k )$ $O( n * k )$ $O( n * k )$ $O(1)
桶排序 $O( n + K )$ $O( n + K )$ $O( n^2 )$ $O(1)

堆排序中建堆过程的时间复杂度是 $O(n)$

桶排序和基数排序均属于分配排序。分配排序的基本思想:排序过程无须比较关键字,而是通过用额外的空间来”分配”和”收集”来实现排序,它们的时间复杂度可达到线性阶:O(n)。简言之就是:用空间换时间,所以性能与基于比较的排序才有数量级的提高!

参考 hexo中插入数学公式
MathJax