冒泡排序算法详解(含Python代码实现)

冒泡排序(Bubble Sort)是最基础的排序算法之一,通常用于学习排序算法的入门理解。本文将通过 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]
    return arr

# 示例
arr = [64, 34, 25, 12, 22, 11, 90]
print('bubble_sorted:', bubble_sort(arr))

三、代码详解

  • 外层循环 for i in range(n) 表示总共进行 n 轮冒泡。

  • 内层循环 for j in range(0, n - i - 1) 逐渐减少比较次数,因为每轮结束后,末尾已是有序的最大值。

  • 条件判断 if arr[j] > arr[j + 1] 是核心逻辑,若顺序错误就交换两个数。

四、图解冒泡排序过程

以数组 [5, 3, 8, 4] 为例:

第1轮:

  • 比较 5 和 3 → 交换 [3, 5, 8, 4]

  • 比较 5 和 8 → 无需交换

  • 比较 8 和 4 → 交换 [3, 5, 4, 8]

第2轮:

  • 比较 3 和 5 → 无需交换

  • 比较 5 和 4 → 交换 [3, 4, 5, 8]

第3轮:

  • 比较 3 和 4 → 无需交换

最终结果:[3, 4, 5, 8]

五、时间复杂度分析 

情况 时间复杂度 说明
最好情况 O(n²) 没有优化时依然要遍历两层
最坏情况 O(n²) 完全逆序,最多比较和交换次数
平均情况 O(n²) 大多数情况下都需交换

若加入 flag 标志变量检测是否交换,则最好情况可优化为 O(n)。

空间复杂度:O(1),属于原地排序。

稳定性:稳定排序(相等元素相对位置不变)。

六、适用场景

冒泡排序虽然不适合处理大规模数据,但适用于:

  • 学习排序逻辑

  • 小规模数据

  • 对排序稳定性有要求的简单任务

✅七、优化建议(进阶)

可以引入一个标志位 swapped 来记录本轮是否发生了交换,如果某一轮没有交换,则说明数组已是有序的:

def bubble_sort_optimized(arr):
    n = len(arr)
    for i in range(n):
        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]
                swapped = True
        if not swapped:
            break
    return arr

八、总结

冒泡排序是一种简单但不高效的排序算法,作为入门学习非常合适。在实际项目中,建议使用快速排序、归并排序或 Python 内置的 sort(),但理解冒泡排序对于掌握更复杂的排序算法非常重要。

 

你可能感兴趣的:(算法)