冒泡法

冒泡法说明

冒泡排序是一种简单的比较排序算法。它重复地遍历要排序的列表,依次比较每对相邻的元素,并且如果它们的顺序错误就交换它们。遍历的过程会持续多次,每次都会让未排序的最大元素"冒泡"到列表的末尾。由于它只需要在相邻的元素之间进行比较和交换操作,因此它被称为冒泡排序。排序结果分为升序和降序排列。

算法步骤

1. 从列表的第一个元素开始,依次比较相邻的两个元素,如果顺序不正确,则交换它们。
2. 重复以上步骤直到没有任何元素需要交换,即列表已经排序完成。

算法优化

尽管冒泡排序是一个简单且容易理解的排序算法,但是它的效率并不高,特别是对于大型数据集。为了提高效率,可以对冒泡排序进行一些优化,例如添加一个标识来指示是否发生了交换,如果没有发生交换,则说明列表已经排好序,不需要继续遍历。

这种优化方式不会改变冒泡排序的最坏情况时间复杂度(仍然是 O(n^2),但它可以显著提高对于部分排序或已经完全排序的列表的处理效率。

时间复杂度 

最佳情况下的时间复杂度为O(n),即列表已经是有序的,只需要进行一次遍历。

最坏情况下的时间复杂度为O(n^2),即列表是逆序的,需要进行n*(n-1)/2次比较和交换操作。

平均时间复杂度为O(n^2)。

示例代码

def bubble_sort_optimized(arr):
    n = len(arr)
    # 遍历所有数组元素
    for i in range(n):
        swapped = False
        # 最后的 i 个元素已经排好,不需要重新排序
        for j in range(0, n - i - 1):
            # 如果发现元素顺序不正确则进行交换
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
                swapped = True
        # 如果这一轮没有发生交换,则提前结束排序
        if not swapped:
            break


# 测试优化后的冒泡排序
arr = [64, 34, 25, 12, 22, 11, 90]

print("排序前的数组:", arr)  # 输出:排序前的数组: [64, 34, 25, 12, 22, 11, 90]
bubble_sort_optimized(arr) 
print("排序后的数组:", arr)  # 输出:排序后的数组: [11, 12, 22, 25, 34, 64, 90]
posted @ 2024-04-08 09:01  小吉猫  阅读(5)  评论(0编辑  收藏  举报