排序比较
各种排序方法的比较
| 排序方法 | 时间复杂度(最好) | 时间复杂度(最坏) | 时间复杂度(平均) | 空间复杂度 | 稳定性 | 附述 |
| 直接插入排序 | O(n) | O(n2) | O(n2) | O(1) | 稳定 |
1.适用于顺序和链式存储结构。 2.更适合初始记录基本有序(正序)并且n较小的情况,当n较大时,时间复杂度较高,不宜采用。 |
| 折半插入排序 | O(nlog2n) | O(n2) | O(n2) | O(1) | 稳定 |
1.折半查找只能用顺序结构,不能用链式结构。 2.就平均性能来说,折半插入排序优于直接插入排序。 3.移动次数和直接插入排序相同,依赖于对象的初始排列。 4.适用于初始记录无序,n较大的情况。 |
| 希尔排序 | O(n1.3) | O(1) | 不稳定 |
1.只能用顺序结构,不能用链式结构。 2.总的比较次数和移动次数都比直接插入排序少,n越大越明显。 3.适用于初始记录无序,n较大的情况。 |
||
| 冒泡排序 | O(n) | O(n2) | O(n2) | O(1) | 稳定 |
1.可用于链式存储结构。 2.平均时间性能比直接插入排序差。 3.当初始记录无序,n较大时,不宜采用。 |
| 快速排序 | O(nlog2n) | O(n2) | O(nlog2n) | O(nlog2n) | 不稳定 |
1.适用于顺序结构,很难用于链式结构。 2.快速排序是递归的,需要一个栈存放数据。最大递归调用次数与递归树的深度一致。 3.当n较大时,在平均情况下快速排序是所有内部排序方法中速度最快的一种。 4.快速排序时排序算法中平均性能最好的一种排序。 5.空间复杂度:O(log2n)(最好)、O(nlog2n)(平均)、O(n)(最坏)。 6.适用于初始记录无序,n较大的情况。 |
| 简单选择排序 | O(n2) | O(n2) | O(n2) | O(1) | 不稳定 |
1.可用于链式存储结构。 2.就选择排序方法本身来讲,它是一种稳定的排序方法。 2.移动记录次数较少,当每一记录占用的空间较多时,此方法比直接插入排序快。 |
| 堆排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(1) | 不稳定 |
1.只能用顺序结构,不能用链式结构。 2.平均性能接近于最坏性能。 3.时间复杂度不受数据初始状态影响而恒为O(nlog2n)。 4.记录较少时不宜采用,当记录较多时较为高效。 |
| 归并排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(n) | 稳定 |
1.适用于顺序和链式存储结构。 2.用顺序表实现时,需要和待排记录个数相等的辅助存储空间。 3.用于链式结构时,不需要附加存储空间,但递归实现时仍需要开辟相应的递归工作栈。 |
| 基数排序 | O(d(n+rd)) | O(d(n+rd)) | O(d(n+rd)) | O(n+rd) | 稳定 |
1.适用于顺序和链式存储结构。 2.需辅助空间为2rd个队列,加n个指针域的空间。 |
稳定性:
归并排序 最稳定 (快速排序,堆排序)
堆排序:
1.设有5000个待排序的记录关键字,如果需要用最快的方法选出其中最小的10个记录关键字,则用堆排序可以达到此目的。
2.设某堆中有n个结点,则在该堆中插入一个新结点的时间复杂度为O(log2n)。
二叉排序树:
在有n个结点的二叉排序树上查找结点的平均时间复杂度为O(log2n)。
分块查找:
1.分块查找的平均查找长度不仅与索引表的长度有关,而且与块的长度有关。
2.分块查找的基本思想是首先在索引表中进行查找,以便确定给定的关键字可能存在的块号,然后再在相应的块内进行顺序查找。
表头结点:
单链表的第一个放有关顶点 的信息,其余结点放边的信息。
完全图:
1.无向完全图:无向图,具有n(n-1)/2条边。
2.有向完全图:有向图,具有n(n-1)条弧。
图:
1.连通图:在无向图中,任意顶点Vi到Vj都是连通的。
2.联通分量:极大连通子图。
3.强连通图:在有向图中,每一对顶点Vi到Vj,Vj到Vi,都存在路径。
4.强连通分量:有向图的极大强连通子图。

浙公网安备 33010602011771号