谁 给写个 连表 排序函数 自己真不会了

来源:百度知道 编辑:UC知道 时间:2024/06/28 07:39:15
STUDENT *sort(STUDENT *head)
{
排序在 本函数内 完成
函数 返回 排序后的 连头
比如说 按总分的高低 排序

struct s
{
float sum;
struct s *next:
}
用交换接点的 方法
不 交换 接点中的 sum;

下面是冒泡排序的程序:

NODE *bubblesort(NODE *head)
{
NODE *q,*tail,*p;

p=(NODE*)malloc(sizeof(NODE)); //这里申请了一个头节点,便于操作,
p->next = head; //如果有头接点的链表,这种操作不需要了,更简单些
head = p;
tail = NULL; //tail后面的是已经排好序的,所以刚开始tail置为NULL
while(tail != head->next) //冒泡排序需要2重循环,这是外层循环,从后往前循环
{
p = head;
q =p->next; //p->next是前节点,q->next是后节点
while(q->next != tail) //内层循环,从前往后循环
{
if (p->next->sum < q->next->sum) //如果前节点的值<后节点的,则交换
{
p->next = q->next; //这几句交换代码是通过指针完成的,而不是交换节点中值
q->next = q->next->next; //注意:这几句换的是 p->next和q->next,而不是p和q
p->next->next = q;
}
p = p->next; //继续下一个
q = p->next;
}
tail = q; //如果内层循环一圈,tail向前移动一个
}
p