单向链表排序,请教给位大侠~~

wc454653269 2012-08-10 10:26:12
网上看到一段链表排序代码,看的很迷糊,有没有大侠配上注释来给菜鸟详细说明一下啊,跪谢~~

///////////排序,指针做行参
link *Sort1(link *head)
{
link *h, *p, *q, *r, *s;
h=p=(link *)malloc(sizeof(link));
p->next = head;

//p 控制循环比较的次数
while (p->next!=NULL)
{
r = p;
q = p->next;
while (q->next!=NULL)
{
if (q->next->data < r->next->data)
r = q;
q = q->next;
}

if (r != p)
{
s = r->next;
r->next = s->next;
s->next = p->next;
p->next = s;
}
p = p->next;
}
head = h->next;
free (h);
return head;
}

...全文
63 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
linuxblack125125 2012-08-11
  • 打赏
  • 举报
回复

link *Sort1(link *head)
{
link *h, *p, *q, *r, *s;
h=p=(link *)malloc(sizeof(link));
p->next = head;

//p 控制循环比较的次数
while (p->next!=NULL) //从链表的第一个数据开始,循环比较
{
r = p;
q = p->next;
while (q->next!=NULL) //第一次循环找出最小的,第二次循环找出第二小的。。。。。
{
if (q->next->data < r->next->data)//如果后面的数据小于前面的
r = q; //则让r指向它
q = q->next; //q后移
}

if (r != p) //这一段感觉有问题,反正算法是将最小的记录下来,然后继续下一轮比较
{
s = r->next;
r->next = s->next;
s->next = p->next;
p->next = s;
}
p = p->next;
}
head = h->next; //h都没参加运算,然后这里突然暴出来,应该是上面有点问题。
free (h);
return head;
}


掌握了基本思路和算法就可以了。剩下的自己实现。
wc454653269 2012-08-11
  • 打赏
  • 举报
回复
这个程序太罗嗦了,结贴咯
  • 打赏
  • 举报
回复
这是一个选择排序的算法,你到网上百度一下选择排序,相信对你有用
wc454653269 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
1.哪儿迷糊?
2.不会调试?
[/Quote]
if那一块,初学,很多不会的地方,帮帮忙吧,大侠
DataChat.Club 2012-08-10
  • 打赏
  • 举报
回复
1.哪儿迷糊?
2.不会调试?

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧