本文关于排序算法概述主要引自《新编数据结构习题与解析》(李春葆等著)第11章。
所谓排序,就是要整理表中的元素,使之按关键字递增(或递减)次序排列起来。
如果待排序的表中,存在多个关键字相同的元素,经过排序后这些具有相同关键字的元素之间的相对次序保持不变,则称这种排序方法是稳定的;反之,若具有相同关键字的元素之间的相对次序发生变化,则称这种排序方法是不稳定的。
下边是一些常用排序算法:
大类别 |
排序算法 |
时间复杂度 |
空间复杂度 |
稳定性 |
复杂性 |
||
平均情况 |
最坏情况 |
最好情况 |
|||||
插入排序 |
插入排序 |
O(n2) |
O(n2) |
O(n) |
O(1) |
稳定 |
简单 |
希尔排序 |
O(n1.3) |
O(1) |
不稳定 |
较复杂 |
|||
选择排序 |
简单排序 |
O(n2) |
O(n2) |
O(n2) |
O(1) |
不稳定 |
简单 |
堆排序 |
O(nlog2n) |
O(nlog2n) |
O(nlog2n) |
O(1) |
不稳定 |
较复杂 |
|
交换排序 |
冒泡排序 |
O(n2) |
O(n2) |
O(n) |
O(1) |
稳定 |
简单 |
快速排序 |
O(nlog2n) |
O(n2) |
O(nlog2n) |
O(log2n) |
不稳定 |
较复杂 |
|
归并排序 |
归并排序 |
O(nlog2n) |
O(nlog2n) |
O(nlog2n) |
O(n) |
稳定 |
较复杂 |
基数排序 |
基数排序 |
O(d(n+r)) |
O(d(n+r)) |
O(d(n+r)) |
O(n+r) |
稳定 |
较复杂 |
注:位图排序也是值得注意的一种排序方法。
当将“二叉树”按中序输出时就是一个有序的序列。
至于快速排序,因为存在递归调用,所以空间复杂度为O(log2n)。
可参考博文: