免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: pmerofc
打印 上一主题 下一主题

[算法] 我认为用冒泡法对链表进行排序很蠢,元芳,这事儿你怎么看? [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
41 [报告]
发表于 2012-11-20 23:56 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
42 [报告]
发表于 2012-11-21 00:00 |只看该作者
回复 41# pmerofc

元方,我坚持认为是。

一下能多冒几个泡,干嘛要一个一个冒泡。从这个角度讲,冒泡算法是有点愚蠢。
   

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
43 [报告]
发表于 2012-11-21 00:31 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
44 [报告]
发表于 2012-11-21 10:49 |只看该作者
pmerofc 发表于 2012-11-19 17:49
回复 6# liuiang


怎么个容易法?上代码.

论坛徽章:
0
45 [报告]
发表于 2012-11-21 10:50 |只看该作者
pmerofc 发表于 2012-11-19 15:53
我确实想这样说的
因为如果需要一个有序的链表
开始建立链表时就可以实现

修改版归并排序效果不错。
http://stackoverflow.com/questio ... lementation-so-fast

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
46 [报告]
发表于 2012-11-21 14:47 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
47 [报告]
发表于 2012-11-22 12:43 |只看该作者
本帖最后由 耗资喜欢猫 于 2012-11-22 12:44 编辑
sonicling 发表于 2012-11-19 20:37
回复 15# pmerofc

敢问,{9,8,7,6,5,4,3,2,1},这样的你插入排序时间是多少?,是不是应该是1+2+...n,对于这样的数列,高一的数学知识就可以秒杀,然后再用Big-O notation,去掉低阶项,敢问,这值是多少?

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
48 [报告]
发表于 2012-11-22 12:48 |只看该作者
本帖最后由 starwing83 于 2012-11-22 12:51 编辑

回复 7# pmerofc


    不容易,反而一个完整链表容易排序。链表是天生适合归并排序的,数组反而不适合(需要分配新空间)。

通常如果不得不有建链表排序的需求,要么用索引,如果速度要求不是特别高,就只有插入排序了。

冒泡,对于基本有序的数组或者链表都是有用的,但是还是不如插入排序。

基于比较的高级排序中,平均性能最好的是快排,其次是堆排,然后是希尔,归并排最后,因为要分配新空间。
而基本排序中,最快的就是快排了,冒泡和选择其实都不太理想。(我初二刚学排序的时候,还以为选择是世界上最快的排序法呢= =)

而链表又不太一样,链表最快的排序方法应该是归并,平均性能和最坏性能都很好。然后应该就是快排了,而堆排和希尔是不可能的。链表实现归并和快排都比数组方便。但是这是基于对整个链表排序的,如果是建表排序高级方法基本上就都没辙了。

基本排序里面,插入排序是最自然的。冒泡和选择的性能不了解,但是至少有一点,就是不够自然。

如果实在是对性能要求高,可以考虑用桶排,Linux内核就是这么实现计时器的。

最近做一个计时器的时候遇到了这个问题,但是因为这个计时器主要是短时触发,桶排没有很大的优势,所以采用的是插入排序。一次遍历找位置,然后直接插入,不算CPU cache的话,反而比数组的插入排序更优(需要不断移动位置)。

UPDATE:把堆排和桶排搞混了,我这脑子= =

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
49 [报告]
发表于 2012-11-22 14:07 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
50 [报告]
发表于 2012-11-22 14:27 |只看该作者
回复 49# pmerofc


    何意?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP