第七章 排序(sort)

1. 排序的功能:将一组数据元素(或记录)的任意序列,重新排成一个按关键字有序的序列。(升序或降序)

十种常见排序算法可以分为两大类:
比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。
非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 

排序算法复杂度及稳定性

类型算法时间复杂(平均)时间复杂度最坏(最坏)时间复杂度(最优)空间复杂度稳定性备注
插入排序O(n2)O(n2)O(n)O(1)稳定
冒泡排序O(n2)O(n2)O(n)O(1)稳定
选择排序O(n2)O(n2)O(n2)O(1)不稳定
希尔排序O(n1.3)O(n2)O(n)O(1)不稳定
快速排序O(nlog⁡n)O(n2)O(nlog⁡n)O(log⁡n)不稳定
归并排序O(nlogn)O(nlog⁡n)O(nlog⁡n)O(n)稳定
堆排序O(nlogn)O(nlog⁡n)O(nlog⁡n)O(1)不稳定
计数排序O(n+k)O(n+k)O(n+k)O(k)稳定
桶排序O(n+n2/k+k)O(n2)O(n)O(n+k)稳定桶内排序按插入
基数排序O(n*k)O(n*k)O(n*k)O(n+k)稳定
Scroll to Top