各种排序算法时间复杂度

178 阅读3分钟

各种排序算法比较 

 

各种常用排序算法
类别排序方法时间复杂度空间复杂度稳定性复杂性特点
最好平均最坏辅助存储 简单 
插入排序直接插入O(N)O(N2)O(N2)O(1)稳定简单  
希尔排序O(N)O(N1.3)O(N2)O(1)不稳定复杂 
选择排序直接选择O(N)O(N2)O(N2)O(1)不稳定  
堆排序O(N*log2N)O(N*log2N)O(N*log2N)O(1)不稳定复杂 
交换排序冒泡排序O(N)O(N2)O(N2)O(1)稳定简单1、冒泡排序是一种用时间换空间的排序方法,n小时好 2、最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序,最差时间复杂度O(N^2)只是表示其操作次数的数量级 3、最好的情况是数据本来就有序,复杂度为O(n)
快速排序O(N*log2N)O(N*log2N) O(N2)O(log2n)~O(n) 不稳定复杂1、n大时好,快速排序比较占用内存,内存随n的增大而增大,但却是效率高不稳定的排序算法。 2、划分之后一边是一个,一边是n-1个, 这种极端情况的时间复杂度就是O(N^2) 3、最好的情况是每次都能均匀的划分序列,O(N*log2N)
归并排序O(N*log2N) O(N*log2N) O(N*log2N) O(n)稳定复杂1、n大时好,归并比较占用内存,内存随n的增大而增大,但却是效率高且稳定的排序算法。
基数排序O(d(r+n))O(d(r+n))O(d(r+n))O(rd+n)稳定复杂 
注:r代表关键字基数,d代表长度,n代表关键字个数

 

注:

1、归并排序每次递归都要用到一个辅助表,长度与待排序的表长度相同,虽然递归次数是O(log2n),但每次递归都会释放掉所占的辅助空间,

2、快速排序空间复杂度只是在通常情况下才为O(log2n),如果是最坏情况的话,很显然就要O(n)的空间了。当然,可以通过随机化选择pivot来将空间复杂度降低到O(log2n)。

 

 

相关概念:

1、时间复杂度

     时间复杂度可以认为是对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。

     常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n), 线性对数阶O(nlog2n),平方阶O(n2)

     时间复杂度O(1):算法中语句执行次数为一个常数,则时间复杂度为O(1),

2、空间复杂度

    空间复杂度是指算法在计算机内执行时所需存储空间的度量,它也是问题规模n的函数

    空间复杂度O(1):当一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1)

    空间复杂度O(log2N):当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示为O(log2n)

                                ax=N,则x=logaN,

    空间复杂度O(n):当一个算法的空间复杂度与n成线性比例关系时,可表示为0(n).