void BubbleSord(pList plist)
{
pNode pCur = NULL;
pNode pPre = NULL;
pNode pTail = NULL;//pTail的指向是这个算法的关键
if (plist == NULL || plist->next == NULL)//排除空和一个结点的情况
{
return;
}
while (plist != pTail)//趟数
{
int IsChange = 0;//排除排序时已经是有序的,则不需要再排序
pPre = plist;
pCur = pPre->next;
while (pCur != pTail)//次数
{
if (pPre->data > pCur->data)//升序
{
int tmp = pPre->data;
pCur->data = pPre->data;
pPre->data = tmp;
IsChange = 1;
}
pPre = pPre->next;
pCur = pCur->next;
}
if (!IsChange)//如果有序了,就不排了
{
return;
}
pTail = pPre;
}
}