您的位置:首页 > 其它

链表的排序

2015-10-10 13:54 155 查看
最近学习链表,想到链表的排序,网上找到各种资料,不过觉得都写的不是很清楚,于是就自己动手

对链表的排序主要有两种方法:

一:只交换节点中的元素,不改变链表的顺序。

二:直接交换节点,不改变节点中的元素。

第二种方法相对较复杂点,不过理解啦都很简单的,废话我不多说,把代码贴上相信大家就理解啦。。。

第一种:

void LinkList_Sort(LinkList *head)
{
int a,t;
LinkList *p,*q,*M;
for(p=q=M=head;p->next!=NULL;p=p->next,M=q=p->next)
{
for(a=q->num;q!=NULL;q=q->next)
{
if(q->num < a)
{
M=q;
a=q->num;
}
}
if(p->next!=M)
{
t=p->next->num;
p->next->num=M->num;
M->num=t;
}
}
}


第二种:

void LinkList_Sort( LinkList *head )
{
LinkList *p, *prep, *temp, *tail;
for(tail = NULL; head->next !=tail ;tail = p )
{
for( p = head->next,prep = head;p->next != tail ;p = p->next,prep = prep->next)
{
if( p->num > p->next->num )
{
temp = p->next;
prep->next = p->next;
p->next = p->next->next;
prep->next->next = p;
p = temp;
}
}
}
}


很简单的,不过,大家可以自行用其他高效排序算法实现。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: