各类排序算法时间复杂度

 

各类排序算法比较 算法

 

各类经常使用排序算法函数

类别post

排序方法spa

时间复杂度排序

空间复杂度递归

稳定性内存

复杂性ci

特色it

最好table

平均

最坏

辅助存储

 

简单

 

插入

排序

直接插入

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)

稳定

简单

一、冒泡排序是一种用时间换空间的排序方法,n小时好
二、最坏状况是把顺序的排列变成逆序,或者把逆序的数列变成顺序,最差时间复杂度O(N^2)只是表示其操做次数的数量级
三、最好的状况是数据原本就有序,复杂度为O(n)

快速排序

O(N*log2N)

O(N*log2N) 

O(N2)

O(log2n)~O(n) 

不稳定

复杂

一、n大时好,快速排序比较占用内存,内存随n的增大而增大,但倒是效率高不稳定的排序算法。
二、划分以后一边是一个,一边是n-1个,
这种极端状况的时间复杂度就是O(N^2)
三、最好的状况是每次都能均匀的划分序列,O(N*log2N)

归并排序

O(N*log2N) 

O(N*log2N) 

O(N*log2N) 

O(n)

稳定

复杂

一、n大时好,归并比较占用内存,内存随n的增大而增大,但倒是效率高且稳定的排序算法。

基数排序

O(d(r+n))

O(d(r+n))

O(d(r+n))

O(rd+n)

稳定

复杂

 

注:r表明关键字基数,d表明长度,n表明关键字个数

 

注:

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

二、快速排序空间复杂度只是在一般状况下才为O(log2n),若是是最坏状况的话,很显然就要O(n)的空间了。固然,能够经过随机化选择pivot来将空间复杂度下降到O(log2n)。

 

 

相关概念:

一、时间复杂度

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

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

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

二、空间复杂度

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

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

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

                                 ax=N,则x=logaN,

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

相关文章
相关标签/搜索