免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5986 | 回复: 14
打印 上一主题 下一主题

请教如何实现链表中按关键字排序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-19 16:20 |只看该作者 |倒序浏览
有一结构体实现的单链表,如何实现按结构体中一项或2项的关系实现排序。

有没有开源的算法或者demo程序或者提供原理思路等?

谢谢指教了。。

论坛徽章:
0
2 [报告]
发表于 2009-02-19 16:45 |只看该作者
用qsort试试

论坛徽章:
8
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技术图书徽章
日期:2013-12-04 10:48:50酉鸡
日期:2014-01-03 10:32:30辰龙
日期:2014-03-06 15:04:07
3 [报告]
发表于 2009-02-19 16:52 |只看该作者
适合单链表的排序方法,可能只有归并一个……

比如,3->4->9->8->6,第一步先把它看作5个单元素子链表两两归并,得3->4、8->9、6三个有序子链表;然后在这三个子链表上反复执行上述操作,即可得到最终结果。


也可以用一个数组记下每个节点的指针,然后把这个数组扔给qsort完成排序,最后再根据数组重新生成有序链表——这个办法需要自己实现的代码更少,更不易出错。

[ 本帖最后由 shan_ghost 于 2009-2-19 17:13 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-02-19 16:58 |只看该作者
原帖由 gawk 于 2009-2-19 16:45 发表
用qsort试试

qsort只能是连续的。

论坛徽章:
0
5 [报告]
发表于 2009-02-19 17:01 |只看该作者
原帖由 cugb_cat 于 2009-2-19 16:58 发表

qsort只能是连续的。

呵呵,所以说试试

论坛徽章:
0
6 [报告]
发表于 2009-02-19 17:03 |只看该作者
不过也可以构造个指针数组,然后用qsort排完序,然后在从新构造链表,O(∩_∩)O~

论坛徽章:
0
7 [报告]
发表于 2009-02-19 17:20 |只看该作者
有没有相关例子的源码的。。

论坛徽章:
0
8 [报告]
发表于 2009-02-19 18:04 |只看该作者
原帖由 gawk 于 2009-2-19 17:01 发表

呵呵,所以说试试



这样会造成一个隐藏的 bug吧。  你不能保证list里边挂的内存是连续的

论坛徽章:
0
9 [报告]
发表于 2009-02-19 18:23 |只看该作者
哎呀,quick sort 只是一种算法嘛,当标准库无法满足需求的时候,就需要自己动手写了。
其实就是编写排序算法的实现,具体用哪个算法,按照什么字段排列,都得你自己考虑。

论坛徽章:
0
10 [报告]
发表于 2009-02-19 22:02 |只看该作者
原帖由 wangqi0021 于 2009-2-19 18:04 发表



这样会造成一个隐藏的 bug吧。  你不能保证list里边挂的内存是连续的

我指的试试,是想他结合qsort往指针数组上构造
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP