我在前面两篇博客《经典算法学习——单链表(不带头结点)实现冒泡排序》《经典算法学习——单链表实现冒泡排序(带头结点)》中详细描述了分别使用带头结点和不带头结点的单链表实现了冒泡排序,让我们对单链表和冒泡排序有了理性的认识。今天我们将会来使用不带头结点的非循环双向链表来实现冒泡排序,在处理过程中,这种冒泡比前面两种更为简单高效。代码上传至 https://github.com/chenyufeng1991/DoubleLinkedList_BubbleSort 。
核心代码如下:
//冒泡排序
Node *BubbleSort(Node *pNode){
int count = sizeList(pNode);
Node *pMove;
pMove = pNode;
//遍历次数为count-1
while (count > 1) {
while (pMove->next != NULL) {
if (pMove->element > pMove->next->element) {
int temp;
//这里的数据交换比单链表简单
temp = pMove->element;
pMove->element = pMove->next->element;
pMove->next->element = temp;
}
pMove = pMove->next;
}
count--;
//再次回到链表头部
pMove = pNode;
}
printf("%s函数执行,冒泡排序完成\n",__FUNCTION__);
return pNode;
}原文:http://blog.csdn.net/chenyufeng1991/article/details/50790966