内排序
排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。
内排序有可以分为以下几类:
(1)、插入排序:直接插入排序、二分法插入排序、希尔排序。
(2)、选择排序:直接选择排序、堆排序。
(3)、交换排序:冒泡排序、快速排序。
(4)、归并排序
(5)、基数排序
复杂度
排序方法 |
时间复杂度 |
空间复杂度 |
稳定性 |
|||
平均情况 |
最好情况 |
最坏情况 |
||||
插入排序 |
直接插入 |
O(n2) |
O(n) |
O(n2) |
O(1) |
稳定 |
Shell排序 |
O(n1~2) |
O(nlog2n) |
O(n2) |
O(1) |
不稳定 |
|
选择排序 |
直接选择 |
O(n2) |
O(n2) |
O(n2) |
O(1) |
不稳定 |
堆排序 |
O(nlog2n) |
O(nlog2n) |
O(nlog2n) |
O(1) |
不稳定 |
|
交换排序 |
冒泡排序 |
O(n2) |
O(n) |
O(n2) |
O(1) |
稳定 |
快速排序 |
O(nlog2n) |
O(nlog2n) |
O(n2) |
O(log2n) |
不稳定 |
|
归并排序 |
O(nlog2n) |
O(nlog2n) |
O(nlog2n) |
O(n) |
稳定 |
|
基数排序 |
O(d(n+r)) |
O(d(n+r)) |
O(d(n+r)) |
O(n+rd) |
稳定 |
|
注:1.希尔排序的时间复杂度和增量的选择有关。 2.基数排序的复杂度中,r代表关键字的基数,d代表长度,n表示关键字的个数。 |