C语言 链表怎么排序 急求大虾

如题所述

排序!这是一个庞大的话题,有插入排序,插入排序又分直接插入排序、希尔排序等,还有交换排序,交换排序有冒泡排序、快速排序,还有选择排序,有直接选择排序、归并排序等等…而且还不断的有新的排序方法产生…不知道你要哪一种…新手一般用选择排序和冒泡排序,方法简单,两重循环。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-26
你稍微改动下,应该可以,算法是一样的

void
order()
{
t=head;
p=head;
//
r=head;//head是原链表的头
u=0;
//t指向链表中score最大的一个链
while(p->next!=0)
{

if(p->next->score
>
t->score)

{

t=p->next;

u=p;

}
//
if(p!=head)r=r->next;//r比p少前进一次,即r指向p前一格

p=p->next;
}
q=s=t;//q是排序后新链表的头
if(u!=0)u->next=t->next;//原链表t处断开
else
head=t->next;
p=head;
while(p!=0)
{

//同上,找出score最大的那个链

u=0;

t=head;

while(p->next!=0)

{

if(p->next->score>t->score)

{

t=p->next;

u=p;

}
//
if(p!=head)r=r->next;

p=p->next;

}

s->next=t;//把找出的score最大的链接到新链表后

s=s->next;

if(u!=0)u->next=t->next;//原链表t处断开

else
head=t->next;

//
t=head;

p=head;
//
r=head;
}
s->next=0;//新链表的结束标记
head=q;//head指向排序后链表的头
}
相似回答
大家正在搜