Java教程

排序算法【转】

本文主要是介绍排序算法【转】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

原文:

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

分类:

  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)  稳定

 

这篇关于排序算法【转】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!