单链表(五)——链表的排序

/*********************************************************************
* 函数名称:linklist *SortLinklist(linklist *head)
* 函数功能:链表排序
* 参    数:head----链表的头结点
* 返 回 值:按从小到大的顺序排序后的链表头结点
* 说    明:冒泡排序方法
*********************************************************************/
linklist *SortLinklist(linklist *head)
{
	linklist *tp=head, *pretp, *temp;
	if(head==NULL ||head->next==NULL)
		return head;
	while(1)
	{
		int flag=0;  // 标志位,当某趟排序没发生交换时,flag=0,此时说明排序完成
		tp = head->next;  // 将tp指针恢复,准备进行下一趟排序
		pretp = head;  // 将pretp指针恢复,准备进行下一趟排序
		while(tp->next!=NULL)
		{
			if(pretp->next->data > tp->next->data)  // 如果链表前一个节点的值大于后一个结点的值,则交换两结点
			{
				temp = tp->next;
				tp->next = temp->next;
				temp->next = pretp->next;
				pretp->next = temp;
				flag = 1;   // 如果发生交换,置标志位为1
			}
			pretp = pretp->next;  // 将pretp指针前进一个结点
			tp = pretp->next;	  // 将tp指针前进一个结点	
		}
		if(flag==0)  // 如果某趟排序没发生交换时,flag=0,此时说明排序完成,返回头结点
			return head;
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值