【Python 冒泡排序和双向冒泡排序】

一、单向冒泡-降序

# 单向冒泡-降序
def BubbleSort():
    L = [5, 2, 3, 1, 4]
    n = len(L)
    for i in range(n):
        for j in range(0, n - i - 1):
            if L[j + 1] > L[j]:
                L[j], L[j + 1] = L[j + 1], L[j]
    print(L) 

二、双向冒泡排序-升序

 # 双向选择排序
def BidirectionalSelectionSort():
    a = [65, 8, 2, 8, 0, 9, 8, 7, 6, 22, 5, 2, 4]
    left, right = 0, len(a) - 1
    while left < right:
        imin = imax = left
        for k in range(left + 1, right + 1):
            if a[k] < a[imin]:
                imin = k
            elif a[k] > a[imax]:
                imax = k
        if imin != left:
            a[imin], a[left] = a[left], a[imin]
        if imax == left:
            imax = imin
        if imax != right:
            a[imax], a[right] = a[right], a[imax]
        left = left + 1
        right = right - 1
    print(a)

三、双向冒泡存在的意义 

        1、双向冒泡排序,也称为鸡尾酒排序或定向冒泡排序,是一种排序算法。它的意义在于优化传统冒泡排序的性能,特别是对于有大量逆序元素的情况。

        2、传统冒泡排序从列表的一端开始,通过比较和交换相邻元素来将最大(或最小)的元素冒泡到列表的末尾。这个过程需要多次遍历列表,每次遍历都将一个最大(或最小)的元素放置在正确的位置上。而双向冒泡排序从列表的两端同时开始,分别进行正向和反向的冒泡过程。在每次遍历中,它交替进行正向冒泡和反向冒泡,将较小的元素冒泡到列表的前端,将较大的元素冒泡到列表的后端。这样,相对于传统冒泡排序,双向冒泡排序在每次遍历中可以同时找到最小和最大的元素,并将它们归位。

        3、双向冒泡排序的意义在于具有以下特点:

        1)减少排序过程中不必要的遍历次数:传统冒泡排序每次遍历只能找到最大(或最小)的元素,而双向冒泡排序每次遍历同时找到最小和最大的元素。这样可以减少排序过程中的不必要遍历次数,提高性能。

        2)适用于有大量逆序元素的情况:当待排序列表中存在大量逆序元素时,传统冒泡排序的性能较差,需要进行多次遍历。而双向冒泡排序可以同时从列表的两端进行排序,减少逆序元素的交换次数,提高排序效率。

        尽管双向冒泡排序在某些特定情况下可以提高性能,但它的时间复杂度仍然为O(n^2),因此在面对大规模数据时,更高效的排序算法,如快速排序、归并排序等,往往是更好的选择。

四、冒泡图示

以升序向右冒泡为例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值