读书人

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

发布时间: 2012-08-27 21:21:56 作者: rapoo

单向链表排序,请教给位大侠~~
网上看到一段链表排序代码,看的很迷糊,有没有大侠配上注释来给菜鸟详细说明一下啊,跪谢~~

///////////排序,指针做行参
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;
}



[解决办法]
1.哪儿迷糊?
2.不会调试?
[解决办法]
这是一个选择排序的算法,你到网上百度一下选择排序,相信对你有用

[解决办法]

C/C++ code
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;} 

读书人网 >C语言

热点推荐