网站首页 > 技术文章 正文
冒泡排序(Bubble Sort)是一种简单的排序算法,通过多次比较相邻元素,将较大的元素逐步“冒泡”到列表的末尾。虽然效率不高,但冒泡排序的原理直观,适合理解排序算法的基础。
冒泡排序算法步骤
- 外层循环:控制需要的排序轮数。每轮循环会将剩余未排序的部分最大值冒泡到末尾。
- 内层循环:从列表开头开始,两两比较相邻的元素。如果前一个元素大于后一个元素,就交换它们。
- 优化点:可以使用标志位检查本轮是否有交换发生,如果没有交换说明数组已排序,可以提前终止。
冒泡排序的 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
return arr
示例
python
# 示例数组
array = [64, 34, 25, 12, 22, 11, 90]
# 调用冒泡排序
sorted_array = bubble_sort(array)
print("排序后的数组:", sorted_array)
代码解析
- for i in range(n):外层循环控制轮次,每一轮将未排序区域的最大值“冒泡”到最末尾。
- for j in range(0, n - i - 1):内层循环比较相邻的元素,n - i - 1 确保不比较已经排序的部分。
- arr[j], arr[j + 1] = arr[j + 1], arr[j]:如果前一个元素比后一个大,交换它们。
- 提前退出条件:swapped 作为标志位,在本轮内没有发生任何交换,说明数组已排序,直接结束。
输出
plaintext
排序后的数组: [11, 12, 22, 25, 34, 64, 90]
复杂度分析
- 时间复杂度:平均和最差情况为 O(n2)O(n^2)O(n2),最好情况(已排序数组)为 O(n)O(n)O(n)。
- 空间复杂度:O(1)O(1)O(1),只需要常量级额外空间。
猜你喜欢
- 2024-12-12 用Python画雷达图,分析多指标数据
- 2024-12-12 Linux 下Python 脚本编写的"奇技淫巧"
- 2024-12-12 Python实战宝典:30道经典编程挑战,演绎多变解法,高清PDF下载
- 2024-12-12 玩转Python—列表介绍
- 2024-12-12 excel应用技巧:结果大于100取实际,小于100按100
- 2024-12-12 Python入门,一定要吃透这69个内置函数
- 2024-12-12 蓝桥杯备考冲刺必刷题(Python) | 128 冰雹数
- 2024-12-12 python求两个数的最小公倍数,两种简单解法
- 2024-12-12 python 学习记录八:取表格种编号重复的最大、最小值
- 2024-12-12 Python常用的40个内置函数使用介绍
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 91℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)