免费注册 查看新帖 |

Chinaunix

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

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

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

论坛徽章:
0
32 [报告]
发表于 2012-11-20 00:28 |只看该作者
回复 25# hbmhalley


    我想错了。

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
33 [报告]
发表于 2012-11-20 09:59 |只看该作者
很愚蠢
是很愚蠢
freshxman 该用户已被删除
34 [报告]
发表于 2012-11-20 10:07 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
35 [报告]
发表于 2012-11-20 10:13 |只看该作者
你们觉得类似于以下的序列:

1 3 5 2 4 6 7 9 11 8 10 12 .... .... 9997 9999 10001 9998 10000 10002

我应该插入啊还是插入啊还是插入啊~~~~~~~~

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

论坛徽章:
0
37 [报告]
发表于 2012-11-20 21:18 |只看该作者
本帖最后由 hbmhalley 于 2012-11-20 21:23 编辑

回复 36# pmerofc


    没必要拆成这么多吧 .. 看着累
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. typedef struct _node_t {
  4.         int w ;
  5.         struct _node_t *n ;
  6. } node_t ;

  7. node_t *head = NULL ;

  8. void ins (int k) {
  9.         node_t *t = malloc (sizeof(node_t)) ;
  10.         t->w = k ;
  11.         t->n = head ;
  12.         head = t ;
  13. }

  14. void print () {
  15.         node_t *t ;
  16.         for (t = head ; t != NULL ; t = t->n) {
  17.                 printf ("%d\n" , t->w) ;
  18.         }
  19.         puts ("") ;
  20. }

  21. void sort_bubble () {
  22.         node_t **i ;
  23.         int flag ;

  24.         do {
  25.                 flag = 0 ;
  26.                 for (i = &head ; (*i)->n != NULL ; i = &(*i)->n) {
  27.                         node_t *j = (*i)->n ;
  28.                         if ((*i)->w > j->w) {
  29.                                 flag = 1 ;
  30.                                 (*i)->n = j->n ;
  31.                                 j->n = *i ;
  32.                                 *i = j ;
  33.                         }
  34.                 }
  35.         } while (flag) ;
  36. }

  37. void sort_insert () {
  38.         node_t *nhead = NULL , *i , *next , **j ;
  39.         for (i = head ; i != NULL ; i = next) {
  40.                 next = i->n ;
  41.                 for (j = &nhead ; *j != NULL && (*j)->w < i->w ; j = &(*j)->n)
  42.                         ;

  43.                 i->n = *j ;
  44.                 *j = i ;
  45.         }

  46.         head = nhead ;
  47. }

  48. int main () {
  49.         int t ;
  50.         while (scanf ("%d" , &t) == 1) {
  51.                 ins (t) ;
  52.         }

  53.         print () ;
  54.         sort_insert () ;
  55.         print () ;

  56.         return 0 ;
  57. }
复制代码
正好对比一下.
相对应用于数组的同类算法, 插入排序确实显示出链表的优势 ( i->n = *j ; *j = i ; ) 虽然对复杂度无影响
冒泡虽没有插入排序的简洁, 但代码结构与数组上的冒泡并无太大差别 (flag / for_all / 三行swap)

代码长度差距不大.

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

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
40 [报告]
发表于 2012-11-20 23:45 |只看该作者
pmerofc 发表于 2012-11-20 17:44
回复 30# hbmhalley

献丑。请多指教


元方,这不就是一下多冒几个泡排序算法吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP