我在之前的博客中分别对三种不同的链表进行了冒泡排序,区分的类型有单链表和双向链表,有带头结点的和不带头结点的。其实实现的整体思路是一样的,分别以(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__);
}


Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐