风筝数据结构学习笔记系列(4)各种内排序方法的比较和选择

摘自《数据结构教程》(第三版)李春葆等编著 清华大学出版社 P296

排序方法 平均情况 最坏情况 最好情况 空间复杂度 稳定性 复杂性
直接插入排序

O(n2)

O(n2) O(n) O(1) 稳定 简单
希尔排序 O(n1.3)     O(1) 不稳定 较复杂
冒泡排序 O(n2) O(n2) O(n) O(1) 稳定 简单
快速排序 O(nlog2n) O(n2) O(nlog2n) O(log2n) 不稳定 较复杂
直接选择排序 O(n2) O(n2) O(n2) O(1) 不稳定 简单
堆排序 O(nlog2n) O(nlog2n) O(nlog2n) O(1) 不稳定 较复杂
归并排序 O(nlog2n) O(nlog2n) O(nlog2n) O(n) 稳定 较复杂
基数排序 O(d(n+r)) O(d(n+r)) O(d(n+r)) O(r) 稳定 较复杂

因为不同的排序方法适应不同的应用环境和要求,所以选择合适的排序方法应综合考虑下列因素:

(1)待排序的记录数目n(问题规模);

(2)记录的大小(每个记录的规模);

(3)关键字的结构及初始状态;

(4)对稳定性的要求;

(5)语言工具的条件;

(6)存储结构;

(7)时间和辅助空间复杂度等。

没有哪一种排序方法是绝对好的。每一种排序方法都有其优点,适合于不同的环境。因此,在实际应用中,应根据具体情况做选择。

首先考虑排序对稳定性的要求,若要求稳定,则只能在稳定方法中选取,否则可以在所有方法中选取;

其次要考虑待排序结点数n的大小,若n较大,则可在改进方法中选取,否则在简单方法中选取;

然后再考虑其他因素。

原文地址:https://www.cnblogs.com/fiteg/p/2367104.html