单向链表排序,请教给位大侠~~
网上看到一段链表排序代码,看的很迷糊,有没有大侠配上注释来给菜鸟详细说明一下啊,跪谢~~
///////////排序,指针做行参
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;}