您的位置:首页 > 其它

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

2015-09-13 10:00 211 查看
/*********************************************************************
* 函数名称: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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: