风筝数据结构学习笔记系列(4)各种内排序方法的比较和选择
2012-02-24 18:58
253 查看
摘自《数据结构教程》(第三版)李春葆等编著 清华大学出版社 P296
因为不同的排序方法适应不同的应用环境和要求,所以选择合适的排序方法应综合考虑下列因素:
(1)待排序的记录数目n(问题规模);
(2)记录的大小(每个记录的规模);
(3)关键字的结构及初始状态;
(4)对稳定性的要求;
(5)语言工具的条件;
(6)存储结构;
(7)时间和辅助空间复杂度等。
没有哪一种排序方法是绝对好的。每一种排序方法都有其优点,适合于不同的环境。因此,在实际应用中,应根据具体情况做选择。
首先考虑排序对稳定性的要求,若要求稳定,则只能在稳定方法中选取,否则可以在所有方法中选取;
其次要考虑待排序结点数n的大小,若n较大,则可在改进方法中选取,否则在简单方法中选取;
然后再考虑其他因素。
排序方法 | 平均情况 | 最坏情况 | 最好情况 | 空间复杂度 | 稳定性 | 复杂性 |
直接插入排序 | 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较大,则可在改进方法中选取,否则在简单方法中选取;
然后再考虑其他因素。
相关文章推荐
- 各种内部排序算法复杂度的比较和排序方法的选择
- 各种内部排序方法的比较和选择
- 各种内部排序算法复杂度的比较和排序方法的选择
- 各种内部排序算法复杂度的比较和排序方法的选择
- 各种内部排序方法的比较和选择 (转)
- 各种内部排序算法复杂度的比较和排序方法的选择
- [排序算法] 各种排序算法(内排序)的比较及选择依据
- 各种内部排序算法复杂度的比较和排序方法的选择
- 各种内部排序算法时间复杂度比较和排序方法的选择
- 各种内部排序算法复杂度的比较和排序方法的选择
- 各种内部排序算法复杂度的比较和排序方法的选择
- 转--各种内部排序算法复杂度的比较和排序方法的选择
- 各种内部排序方法的比较和选择
- 各种内部排序算法复杂度的比较和排序方法的选择
- 各种内部排序方法的比较和选择
- 【数据结构之排序11】各种内部排序方法的比较和选择
- [InnoDB系列系列] -- 大数据量的导出导入方法比较
- 各种AJAX方法的使用比较
- 文件上传的各种实现方法比较
- 各种优化方法总结比较(sgd/momentum/Nesterov/adagrad/adadelta)