实现无头链表的冒泡排序
void BubbleSort(PNode pHead)
{
PNode pcur=NULL;//当前结点
PNode ptail=NULL;//每趟排序的尾结点
PNode pnext=NULL;//当前结点的下一个结点
if(pHead==NULL||pHead->next==NULL)//如果链表为空或只有一个结点我们就不用排序,直接返回
{
return;
}
else
{
while(pHead!= ptail)//没一趟比较排序后尾结点就往前移一位(即当前结点),当排序结束时链表的头尾结点相遇时,说明只剩下一个结点,排序结束
{
pcur=pHead;
pnext=pcur->next;
while(pcur->next!=ptail)//每趟比较交换式pcur往后移直到与尾结点相遇,一趟排序结束
{
if(pcur->data>pnext->data)//比较交换
{
DataType temp=pcur->data;
pcur->data=pnext->data;
pnext->data=temp;
}
pcur=pnext;//pcur往后移
pnext=pnext->next;//pnext同时也往后移
}
ptail=pcur;//尾结点在每趟排序结束后往前移一位等于排序结束时的pnext(ptail=pcur)
}
}
}