免费注册 查看新帖 |

Chinaunix

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

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

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

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

论坛徽章:
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
53 [报告]
发表于 2012-11-22 15:02 |只看该作者
本帖最后由 starwing83 于 2012-11-22 15:04 编辑

回复 52# pmerofc


    倒不尽然。比如说我的应用吧。

计时器。

计时器需要很频繁的插入删除,所以数据结构应该对插入删除友好,那么数组被pass。

计时器插入的时候是按序的,但删除的时候需要随机删,那么单链表被pass。

最后的实现手法是双链表,但是计时器是个队列,需要排序。

所以最终的结果就必须要做链表的排序了,而且是增量排序(插入的时候希望能自动排序)

其实用二叉树做这个需求应该是最好的,但是二叉树太过麻烦,时间和空间都不适宜(时间上讲,红黑树的处理比较复杂,而且主要并不是为了查询,红黑树最大的优势没有利用到;在大多数情况下,队列中元素较少(10个以内),因此用红黑树常数会很大;空间上讲,支持随机删除的红黑树至少要三个指针,比双链表结构大。)

需求看怎么有。需求再奇怪,一旦有了应用就不奇怪了。小乔真正没做对的地方是要提一下——这里只是为了教学,可能有点造作。

UPDATE:这么仔细一剖析,我发现实际上最好的结构好像是二叉最小堆………………sigh…………而且似乎用数组即可,这个……

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
55 [报告]
发表于 2012-11-22 16:34 |只看该作者
starwing83 发表于 2012-11-22 15:02
回复 52# pmerofc
最后的实现手法是双链表,但是计时器是个队列,需要排序。
所以最终的结果就必须要做链表的排序了,而且是增量排序(插入的时候希望能自动排序)


不用做链表排序,因为这个链表永远是排好序的。

问题:如何在一个排好序的链表中,找到位置,插入一个新的元素,并且保持排序完好。

论坛徽章:
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
56 [报告]
发表于 2012-11-22 16:44 |只看该作者
回复 55# 群雄逐鹿中原


    二分是没希望的。顺序查找呗。

论坛徽章:
0
57 [报告]
发表于 2012-11-22 20:29 |只看该作者
pmerofc 发表于 2012-11-22 14:39
回复 50# starwing83
我的意思是说,我不是说对链表不能用冒泡法,就如同不能说汽车并非不能用牛拉一样


愚蠢的到底是:

1. 对链表排序
2. 对链表用时间复杂度 Ω(n^2) 的算法排序
3. 对链表用冒泡算法排序

的哪个?

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

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

论坛徽章:
0
60 [报告]
发表于 2012-11-22 20:47 |只看该作者
pmerofc 发表于 2012-11-22 20:37
回复 57# hbmhalley
   冒泡算法排序

   因为需要大量的交换。


    你的意思是:

    1. 冒泡算法本身愚蠢, 因为需要大量交换
    2. 链表结点的交换操作很繁琐, 导致链表上的冒泡相比于数组上的性价比低
    3. 有同样作用于链表上的, 且所需操作比交换简洁, 且所有场景下所需时间优于冒泡的算法

    的哪个?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP