舞动算法:冒泡排序

冒泡排序原理

首先,第一个数和第二个数比较,若第一个比第二个大,则交换位置,然后比较第二个和第三个,重复往后比较;

然后,经过第一轮比较后最大的元素排到了最后;

最后,剩下的元素重复上述步骤即可

冒泡排序特点

1.稳定性:我们从代码中可以看出只有前一个元素大于后一个元素才可能交换位置,所以相同元素的相对顺序不可能改变,所以它是稳定排序

2.比较性:因为排序时元素之间需要比较,所以是比较排序 。

3.时间复杂度:因为它需要双层循环n*(n-1)),所以平均时间复杂度为O(n^2)

4.空间复杂度:只需要常数个辅助单元,所以空间复杂度为O(1),我们把空间复杂度为O(1)的排序成为原地排序(in-place)

不明白?跳个舞吧【https://www.bilibili.com/video/BV1Px411L7Lu

def bubble_sort(arr, n):
    """
    :param arr: 需要排序的数组
    :param n: 这个数组的长度
    """
    # 从第一个数开始依次和它后面的数进行大小比较
    for i in range(0, n):
        # 下一个数是否在数组范围内,是则进行大小判断
        if i + 1 < n and arr[i] > arr[i + 1]:
            arr[i], arr[i + 1] = arr[i + 1], arr[i]

        bubble_sort(arr, n - 1)

    return arr


def bubble_sort2(arr):
    # 第一层for表示循环的遍数
    for i in range(len(arr) - 1):
        # 第二层for表示具体比较哪两个元素,每经历一轮排序需要比较的元素 -i
        for j in range(len(arr) - 1 - i):
            if arr[j] > arr[j + 1]:
                # 如果前面的大于后面的,则交换这两个元素的位置
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr


def bubble_sort3(arr, n):

    for j in range(0, n):
        for i in range(0, n):
            # 下一个数是否在数组范围内,是则进行大小判断
            if i + 1 < n and arr[i] > arr[i + 1]:
                arr[i], arr[i + 1] = arr[i + 1], arr[i]

        # bubble_sort3(arr, n - 1)

    return arr
原文地址:https://www.cnblogs.com/dc2019/p/13619084.html