链表排序

本文详细介绍了两种链表排序方法:一种是通过交换数据域实现排序;另一种是直接交换节点顺序进行排序。每种方法都附有具体代码实现,并通过实例演示了如何在链表中应用这些排序算法。


第一种排序方法只交换数据域值,不交换各节点顺序 以数据域为整型数据且链表带有头结点为例

ElemSN *fun(ElemSN*h)
{
	int t;
	ElemSN*p, *q;
	for (p = h->next; p->next; p = p->next) 
	     for (q = p->next; q; q = q->next)
		 {
			 if (p->datadata)
			 { 
				 t = p->data;
				 p->data = q->data; 
				 q->data = t; 
			 } 
		 }
		 return h;
}


第二种排序方法不交换数据域值,直接交换节点顺序,即指针域值 

    每次循环取出值最大的节点,建链


void fun(ElemSN*h)
{
	ElemSN *p, *q, *mp, *mq, *head = NULL; 
	h = h->next;
	while (h)
	{ 
		for (p = mp = h; p; q = p, p = p->next) 
		{ 
			if (mp->data>p->data)
			{
				mp = p;
				mq = q;
			} 
		} 
		if (mp - h) 
			mq->next = mp->next; 
		else 
			h = h->next; 
		mp->next = head; 
		head = mp; 
	} 
	h->next = head; 
}


贴上来。。。不信我还能忘掉T^T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值