经典算法学习——非循环双向链表实现冒泡排序(不带头结点)

Posted 乞力马扎罗的雪CYF

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典算法学习——非循环双向链表实现冒泡排序(不带头结点)相关的知识,希望对你有一定的参考价值。

       我在前面两篇博客《经典算法学习——单链表(不带头结点)实现冒泡排序》《经典算法学习——单链表实现冒泡排序(带头结点)》中详细描述了分别使用带头结点和不带头结点的单链表实现了冒泡排序,让我们对单链表和冒泡排序有了理性的认识。今天我们将会来使用不带头结点的非循环双向链表来实现冒泡排序,在处理过程中,这种冒泡比前面两种更为简单高效。代码上传至 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;
}


以上是关于经典算法学习——非循环双向链表实现冒泡排序(不带头结点)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构学习笔记(单链表单循环链表带头双向循环链表)的增删查改排序等)

经典算法学习——链表实现冒泡排序

室友开了把LOL的时间,我学会了链表

数据结构入门带头双向循环链表(List)详解(初始化增删查改)

数据结构学习笔记二线性表之链表篇(双向链表)

单链表及其基本操作