题目:
单链表实现冒泡排序
解题思路:
定义三个指针:pNode指向链表头,next指向第二个元素,tail指向的每轮结束的位置,开始为NULL。然后比较pNode和next的值,大就交换,当next为空时第一轮结束,记录这个位置,下一趟排序只要next遇到这个位置就结束。
代码实现:
void BubbleNode(SListNode *pFirst)
{
SListNode *pNode;
SListNode *next;
SListNode *tail=NULL; //标记终止位置
if (pFirst == NULL || pFirst->pNext == NULL)
{
return;
}
while (tail!= pFirst->pNext) //当tail走到第二个数时循环结束
{
DataType flag = 0;
pNode = pFirst;
next = pNode->pNext;
while (next!= tail)
{
if (pNode->data > next->data)
{
flag = 1;
DataType tmp = pNode->data;
pNode->data = next->data;
next->data = tmp;
}
pNode = pNode->pNext;
next = next->pNext;
}
if (flag == 0)
break;
tail = pNode; //尾指针前移
}
}