博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
风筝数据结构学习笔记系列(4)各种内排序方法的比较和选择
阅读量:5263 次
发布时间:2019-06-14

本文共 762 字,大约阅读时间需要 2 分钟。

摘自《数据结构教程》(第三版)李春葆等编著 清华大学出版社 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/archive/2012/02/24/2367104.html

你可能感兴趣的文章
printf格式输出知识整理
查看>>
sed 命令用法
查看>>
当DIV内出现滚动条,fixed实效怎么办?
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
Python中的正则表达式(翻译自DiveintoPython3)
查看>>
java设计模式学习(五):命令模式
查看>>
JavaScript点击按钮创建列表
查看>>
jQuery 学习笔记之五 (jQuery 案例)
查看>>
Using mongo in django to develop web app with python
查看>>
Angular4的依赖注入
查看>>
Struts2 拦截器
查看>>
A - 娜娜梦游仙境系列——诡异的钢琴
查看>>
django中的静态文件管理
查看>>
kinect笔记 四、kinect中的一些脚本和参数的作用(持续更新)
查看>>
laravel 创建自定义全局函数
查看>>
javascript剔除数组重复元素的简单方法
查看>>
JavaScript常用技巧之时间操作
查看>>
w !sudo tee %
查看>>
在我即将离职之际,一点叨叨。
查看>>