编程语言
首页 > 编程语言> > 排序算法【转】

排序算法【转】

作者:互联网

原文:

十大经典排序算法(动图演示) 一像素

分类:

  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