论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
数据结构基础之《(15)—排序算法小结》 ...
数据结构基础之《(15)—排序算法小结》
涛声依旧在
金牌会员
|
2025-1-23 15:13:25
|
显示全部楼层
|
阅读模式
楼主
主题
982
|
帖子
982
|
积分
2946
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
一、排序算法的稳固性
1、稳固性是指同样巨细的样本再排序之后不会改变相对序次
2、对基础类型来说,稳固性毫偶然义
比如:3和3没有区别。《潜伏》里说同样两个一百元大钞,你能告诉我哪一个是高尚的那一个是龌龊的么
3、对非基础类型来说,稳固性有紧张意义
比如:有许多个门生,门生有班级号和年岁
第一回按年岁从小到大排序
得到一个序列,年岁是从小到大的
基于这个序列,再按照班级号从小到大排序
排完之后,如果排序有稳固性的,在1班的门生内部,年岁是从小到大排序的
4、有些排序算法可以实现成稳固的,而有些排序算法无论如何都实现不成稳固的
5、什么算法是稳固的,什么算法是不稳固的
(1)选择排序
没有稳固性,因为它是从0到n-1中找最小值,然后互换
例子:
[5 5 5 5 5 5 1 5 5 5 5]
第一个5和1互换,第一个5会跑到后面几个5的后面,原序列中两个5的相对前后序次就被破坏了
(2)冒泡排序
有稳固性
处置惩罚相当时的态度,就决定了它稳固性能不能实现
相当时不互换,稳固性不会破坏
(3)插入排序
有稳固性
(4)归并排序
有稳固性
(5)快速排序
没有稳固性
(6)堆排序
没有稳固性,因为堆结构根本不考虑稳固不稳固
二、小结
1、排序算法总结
时间复杂度
额外空间复杂度
稳固性
选择排序
O(N^2)
O(1)
无
冒泡排序
O(N^2)
O(1)
有
插入排序
O(N^2)
O(1)
有
归并排序
O(N*logN)
O(N)
有
随机快排
O(N*logN)
O(logN)
无
堆排序
O(N*logN)
O(1)
无
计数排序
O(N)
O(M)
有
基数排序
O(N)
O(N)
有
(1)不基于比较的排序,对样本数据有严格要求,不易改写
(2)基于比较的排序,只要规定好两个样本怎么比巨细就可以直接复用
(3)基于比较的排序,时间复杂度的极限是O(N*logN)
(4)时间复杂度O(N*logN)、额外空间复杂度低于O(N)、且稳固的基于比较的排序是不存在的
(5)为了绝对的速率选快排、为了省空间选堆排、为了稳固性选归并
2、常见的坑
(1)归并排序的额外空间复杂度可以变成O(1),“归并排序 内部缓存法”,但是将变得不再稳固
没必要,直接用堆排序
(2)“原地归并排序”是垃圾,会让时间复杂度变成O(N^2)
没必要,直接用插入排序
(3)快速排序稳固性改进,“01 stable sort”,但是会对样本数据要求更多
没必要,论文里的,限制条件许多
3、工程上对排序的改进
(1)稳固性的考虑
(2)充分使用O(N*logN)和O(N^2)排序各自的优势
比方Java中Arrays.sort()方法:
它会先做个反射,你让我排序的东西,是以值传递的还是以引用传递的
如果以值传递,直接快排
如果以引用排序,会用归并排序
考虑到稳固性
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
涛声依旧在
金牌会员
这个人很懒什么都没写!
楼主热帖
MySQL基本SQL语句之高级操作
maven配置步骤及问题
Juc并发编程12——2万字深入源码:线程 ...
史上最全MongoDB之部署篇
IOS OpenGL ES GPUImage 图像黑白色调 ...
【云原生】裸金属架构之服务器安装VMWa ...
Flink-基于 DataStream API 实现欺诈检 ...
一文读懂K-Means原理与Python实现 ...
大数据ETL开发之图解Kettle工具(入门 ...
Mysql进阶优化篇01——四万字详解数据 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
IOS
网络安全
移动端开发
物联网
容器及微服务
程序人生
分布式数据库
Oracle
鸿蒙
快速回复
返回顶部
返回列表