首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

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

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

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

热点排行