Python算法——冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法,它通过反复交换相邻的元素,将较大的元素逐渐"浮"到数组的末尾,同时将较小的元素逐渐"沉"到数组的开头。冒泡排序是一种基本的比较排序算法,尽管不是最高效的排序算法,但它有助于理解排序算法的基本原理。本文将详细介绍冒泡排序的工作原理和Python实现。

冒泡排序的工作原理

冒泡排序的基本思想是通过多次遍历数组,依次比较相邻的两个元素,并根据比较结果交换它们的位置。每一轮遍历都会将一个最大(或最小)的元素"冒泡"到数组的末尾,因此称为"冒泡排序"。具体步骤如下:

  1. 从数组的第一个元素开始,依次比较相邻的两个元素。
  2. 如果前一个元素大于后一个元素,交换它们的位置。
  3. 继续遍历数组,直到没有交换操作发生。
  4. 重复以上步骤,直到整个数组有序。
下面是一个示例,演示冒泡排序的过程。我们以升序排序为例:

原始数组:[5, 1, 4, 2, 8]

  1. 第一轮遍历:[1, 5, 4, 2, 8](5和1交换)
  2. 第二轮遍历:[1, 4, 5, 2, 8](5和4交换)
  3. 第三轮遍历:[1, 4, 2, 5, 8](5和2交换)
  4. 第四轮遍历:[1, 4, 2, 5, 8](没有交换发生)
    重复以上步骤,直到整个数组有序。
Python实现冒泡排序

下面是Python中的冒泡排序实现:

python 复制代码
def bubble_sort(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  # 如果没有交换,数组已经有序
  • arr 是待排序的数组。
  • n 表示数组的长度。
  • 外层循环 for i in range(n) 用于控制遍历的轮数。
  • 内层循环 for j in range(0, n-i-1) 用于执行具体的比较和交换操作。
  • 如果在一轮遍历中没有发生交换,说明数组已经有序,可以提前结束排序。

示例代码

下面是一个使用Python进行冒泡排序的示例代码:

python 复制代码
def bubble_sort(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

# 测试排序
arr = [5, 1, 4, 2, 8]
bubble_sort(arr)
print("排序后的数组:", arr)

时间复杂度

冒泡排序的时间复杂度为 O(n^2),其中 n 是数组的长度。尽管冒泡排序在大规模数据上不够高效,但它具有直观的实现和理解,适用于小型数据集或教育目的。

总之,冒泡排序是一种简单的排序算法,通过多次遍历和比较相邻元素来实现排序。了解冒泡排序有助于理解排序算法的基本原理,并为学习更高效的排序算法打下基础。

相关推荐
codists21 分钟前
2025年9月文章一览
python
语落心生24 分钟前
FastDeploy SD & Flux 扩散模型边缘端轻量化推理部署实现
python
WWZZ202530 分钟前
ORB_SLAM2原理及代码解析:SetPose() 函数
人工智能·opencv·算法·计算机视觉·机器人·自动驾驶
java1234_小锋36 分钟前
TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 立即执行模式(Eager Execution)
python·深度学习·tensorflow·tensorflow2
王大傻09281 小时前
numpy -- 算术函数 reciprocal() 和 power() 简介
python·numpy
小马学嵌入式~1 小时前
堆排序原理与实现详解
开发语言·数据结构·学习·算法
咕白m6251 小时前
Python 将 Excel 转换为图片:实现数据可视化
后端·python
青岛少儿编程-王老师1 小时前
CCF编程能力等级认证GESP—C++6级—20250927
java·c++·算法
一人の梅雨1 小时前
1688 拍立淘接口深度开发:从图像识别到供应链匹配的技术实现
人工智能·算法·计算机视觉
深蓝电商API1 小时前
不止是 Python:聊聊 Node.js/Puppeteer 在爬虫领域的应用
爬虫·python·node.js