我在之前的博客中分别对三种不同的链表进行了冒泡排序,区分的类型有单链表和双向链表,有带头结点的和不带头结点的。其实实现的整体思路是一样的,分别以(n-1)次遍历链表,比较前后两个节点的大小并判断是否交换。为了学习的完整性,在这篇博客中我们将会来实现对带头结点尾结点的双向非循环链表进行冒泡排序。代码上传至 https://github.com/chenyufeng1991/DoubleLinkedList_NodeList_BubbleSort 。
核心代码如下:
//冒泡排序
void BubbleSort(Node *pHead,Node *pTail){
int count = SizeList(pHead, pTail);
Node *pMove;
pMove = pHead->next;
while (count > 1) {
while (pMove->next != pTail) {
if (pMove->element > pMove->next->element) {
//交换
int temp;
temp = pMove->element;
pMove->element = pMove->next->element;
pMove->next->element = temp;
}
pMove = pMove->next;
}
pMove = pHead->next;
count --;
}
printf("%s函数执行,链表的冒泡排序完成\n",__FUNCTION__);
}