排序算法【转】
作者:互联网
原文:
十大经典排序算法(动图演示) 一像素
分类:
1. 比较类(非线性时间比较类排序):通过比较来决定元素间的相对次序,时间复杂度不能突破O(nlogn)
1.1 交换排序 :冒泡排序 、快速排序
1.2 插入排序 :简单插入排序 、 希尔排序
1.3 选择排序 : 简单选择排序 、堆排序
1.4 归并排序 :二路归并排序、多路归并排序
2.非比较类(线性时间非比较类排序):不通过比较来决定元素间的相对次序,可以突破基于比较排序的时间下界,以线性时间运行
计数排序、桶排序、基数排序
复杂度:
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
排序方法 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 |
冒泡排序 | O(n²) | O(n²) | O(n) | O(1) | 稳定 |
快速排序 | O(n*log₂n) | O(n²) | O(n*log₂n) | O(n*log₂n) | 不稳定 |
简单插入排序 | O(n²) | O(n²) | O(n) | O(1) | 稳定 |
希尔排序 (缩小增量排序) |
O(n1.3) |
O(n²) | O(n) | O(1) | 不稳定 |
简单选择排序 | O(n²) | O(n²) | O(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(n) | 稳定 |
多路归并排序 | |||||
计数排序 | O(n+k) | O(n+k) | O(n+k) | O(n+k) | 稳定 |
桶排序 | O(n+k) | O(n²) | O(n) | O(n+k) | 稳定 |
基数排序 | O(n*k) | O(n*k) | O(n*k) | O(n+k) | 稳定 |
标签:稳定,归并,log,复杂度,算法,排序,插入排序 来源: https://www.cnblogs.com/finding0/p/15440882.html