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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值