基本概念

冒泡排序(Bubble Sort)是一种常见的排序算法,相对来说比较简单。

冒泡排序重复地走访需要排序的元素列表,依次比较两个相邻的元素大小,如果顺序(从小到大)错误就交换它们的位置{说白了就是两两交换,大的放后面}。重复地进行直到没有相邻的元素需要交换,则元素列表排序完成。

在冒泡排序中,值最大(或最小)的元素会通过交换慢慢“浮”到元素列表的“顶端”。就像汽水“冒泡”一样,所以称为冒泡排序。


代码实现

def mao_pao(li):
    for i in range(0,len(li)-1):#第几躺
        for j in range(0,len(li)-i-1):#最高到索引哪里
            if li[j] > li[j+1]:
                li[j],li[j+1] = li[j+1],li[j]
    return li

li=[2,4,3,1,4,5,7,6,9]
mao_pao(li)
print(li)

函数python冒泡排序 python冒泡排序法代码_时间复杂度

补充:

我想到一种可能:如果它后面排好了,就不用排,直接退出循环,我们可以定一个检测参数

没有加检测前:

函数python冒泡排序 python冒泡排序法代码_函数python冒泡排序_02

 加检测后:

函数python冒泡排序 python冒泡排序法代码_python_03

明显看到步骤减少

总结:

1. 时间复杂度

在没有特殊说明时,一般都是计算最坏时间复杂度。

在冒泡排序中,最坏的情况是元素列表的初始状态是完全逆序排列的,需要进行 n-1 轮“冒泡”,每一轮“冒泡”需要进行 n-i 次比较和交换操作。i 的平均值为 n/2 ,时间复杂度为 T(n)=n(n-1)/2 ,再乘每次操作的步骤数(常数,不影响大O记法),所以冒泡排序的时间复杂度为 O(n^2) 。

2. 稳定性

排序算法的稳定性指,当元素列表中有相等的元素时,相等元素的相对次序是否固定不变,如果相对次序固定不变,则排序算法是稳定的,反之。

在冒泡排序中,每次比较两个元素,当元素的大小顺序错误时才会进行交换,如果元素列表中有两个相等的元素,它们最终肯定会相邻在一起,但对它们比较时不会进行交换,相对次序是保持不变的。所以冒泡排序是一种稳定的排序算法。