冒泡排序算法,python代码

推荐: 十大经典排序算法介绍冒泡排序介绍

python 代码实现:

# 冒泡排序:升序
def bubbleSort(array: list) -> list:
    # i表示循环次数,与下标无关;j表示数组下标
    for i in range(1, len(array)):
        for j in range(0, len(array) - i):
            if array[j] > array[j + 1]:
                temp = array[j]
                array[j] = array[j + 1]
                array[j + 1] = temp
    return array

if __name__ == '__main__':
    array = [2, 4, 1, 6, 3, 5, 3, 6, 9, 2]
    print(bubbleSort(array))     # [1, 2, 2, 3, 3, 4, 5, 6, 6, 9]

注:可以使用 python 中特有的变量交换方式实现两个变量的交换:

a, b = b, a     # a,b变量数值交换

则冒泡排序代码可以简化为:

# 冒泡排序:升序
def bubbleSort(array: list) -> list:
    # i表示循环次数,与下标无关;j表示数组下标
    for i in range(1, len(array)):
        for j in range(0, len(array) - i):
            if array[j] > array[j + 1]:
                array[j], array[j + 1] = array[j + 1], array[j]
    return array

if __name__ == '__main__':
    array = [2, 4, 1, 6, 3, 5, 3, 6, 9, 2]
    print(bubbleSort(array))    # [1, 2, 2, 3, 3, 4, 5, 6, 6, 9]

在一般情况下,冒泡排序需要两次 for 循环,所以时间复杂度是 O(n2)

但在最好的情况下(即数组已经有序),只需要判断大小而不需要执行交换操作;此时我们可以在循环过程中设置一个 flag 变量来标记是否执行了交换操作;如果第一次循环过程中都没有执行交换操作,则说明数组已经有序,则可以跳出循环,此时只需要一个 for 循环,则时间复杂度为 O(n)

因此冒泡排序的一般时间复杂度为 O(n2),最坏情况为 O(n2),最好情况为 O(n)

猜你喜欢

转载自blog.csdn.net/qq_43799400/article/details/130877401