Python 冒泡排序算法继续探清楚

Python 冒泡排序算法

目录

什么是冒泡排序算法

冒泡排序是一种简单的排序算法,它的思路是重复地遍历要排序的序列,每次比较相邻元素,如果顺序不对就交换它们的位置,直到整个序列都变得有序为止。冒泡排序算法的名称由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

Python 实现冒泡排序

使用 Python 实现冒泡排序很简单,只需要使用两重循环来遍历整个序列,并在每次内层循环中比较相邻的元素并交换它们的位置即可。下面是使用 Python 实现冒泡排序的代码:

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]

上面代码中,我们定义了一个名为 bubble_sort 的函数,它的参数是一个待排序的列表。在函数中,我们使用两重循环遍历整个列表,并在内层循环中比较相邻元素的大小,如果左边的元素比右边的元素大,就交换它们的位置。当所有元素都被遍历一遍后,列表变得有序。

优化冒泡排序算法

虽然冒泡排序算法很简单,但它的效率并不高。为了提高冒泡排序的效率,可以对其进行一些优化。其中一种优化方法是每次在内层循环中记录最后一次交换的位置,用它来确定下一次排序的范围。在交换元素后,后面的元素就已经排好序了,不需要再次比较。下面是使用 Python 实现优化后的冒泡排序的代码:

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        # 标记是否有数据交换
        is_swapped = False
        # 每次循环都扫描到当前的最后一个元素
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                # 标记有数据交换
                is_swapped = True
        # 如果没有数据交换,说明已经排好序,可以提前结束循环
        if not is_swapped:
            break

上面代码中,我们增加了一个标记变量 is_swapped,用来记录本次循环是否有数据交换。在每次内层循环结束后,如果 is_swapped 为 False,说明本次循环没有进行数据交换,也就是剩下的元素已经排好序了,可以提前终止循环。这样可以有效地减少比较次数,提高排序的效率。

冒泡排序的时间复杂度

冒泡排序的时间复杂度为 O(n^2),其中 n 是序列中元素的个数。在最坏情况下,冒泡排序需要进行 n*(n-1)/2 次比较和交换,因此时间复杂度为 O(n^2)。在最好情况下,序列已经有序,只需要进行一次遍历,因此时间复杂度为 O(n)。

猜你喜欢

转载自blog.csdn.net/weixin_46121540/article/details/129776391