题目:
单链表实现冒泡排序
解题思路:
定义三个指针: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; //尾指针前移 } }