跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
冒泡排序
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:冒泡排序}} '''冒泡排序'''(Bubble Sort)是一种简单的排序算法,通过重复比较相邻元素并交换它们的位置来将列表按升序或降序排列。因其排序过程中较小的元素会逐渐“浮”到列表顶端(像气泡一样上升),故得名“冒泡排序”。 == 算法原理 == 冒泡排序的核心思想是: 1. 从列表的第一个元素开始,依次比较相邻的两个元素。 2. 如果它们的顺序错误(例如前一个元素大于后一个元素),则交换它们的位置。 3. 重复上述步骤,直到列表完全有序。 每次完整的遍历列表称为“一轮”,每轮结束后,最大的未排序元素会被移动到正确的位置。 === 时间复杂度 === * 最坏情况:<math>O(n^2)</math>(列表完全逆序) * 平均情况:<math>O(n^2)</math> * 最好情况:<math>O(n)</math>(列表已经有序,且优化后的算法可以提前终止) == 算法步骤 == 以下是一个升序排序的步骤分解: 1. 比较第1个和第2个元素,如果第1个更大,则交换它们。 2. 比较第2个和第3个元素,重复上述操作。 3. 继续比较直到列表末尾。此时,最大的元素会被移动到最后一个位置。 4. 重复上述过程,但忽略已经排序的末尾部分,直到列表完全有序。 === 伪代码示例 === <syntaxhighlight lang="python"> procedure bubbleSort(list) n = length(list) for i from 0 to n-1 swapped = false for j from 0 to n-i-1 if list[j] > list[j+1] swap(list[j], list[j+1]) swapped = true if not swapped break // 如果没有发生交换,说明列表已经有序 </syntaxhighlight> == 代码实现 == 以下是Python实现的冒泡排序: <syntaxhighlight lang="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 # 提前终止优化 # 示例 data = [64, 34, 25, 12, 22, 11, 90] bubble_sort(data) print("排序后的列表:", data) </syntaxhighlight> '''输出:''' <pre> 排序后的列表: [11, 12, 22, 25, 34, 64, 90] </pre> === 逐步解析 === 以输入 <code>[64, 34, 25, 12, 22, 11, 90]</code> 为例: 1. 第一轮结束后,最大值 90 被移动到末尾:<code>[34, 25, 12, 22, 11, 64, 90]</code> 2. 第二轮结束后,次大值 64 被移动到倒数第二位:<code>[25, 12, 22, 11, 34, 64, 90]</code> 3. 重复上述过程,直到列表完全有序。 == 优化策略 == 1. '''提前终止''':如果某一轮未发生交换,说明列表已有序,可直接退出。 2. '''记录最后交换位置''':最后一次交换的位置之后的元素已经有序,下一轮可跳过这部分。 == 实际应用案例 == 冒泡排序虽然效率较低,但在以下场景仍有应用: * 教学用途:因其简单性,常用于算法入门教学。 * 小规模数据排序:当数据量极小时(如 <10 个元素),其实现简单且性能可接受。 * 部分有序数据:若数据接近有序,优化后的冒泡排序可能比其他 <math>O(n^2)</math> 算法更快。 == 可视化示例 == <mermaid> graph TD A[初始列表: 5, 3, 8, 4, 2] --> B[第一轮: 比较5和3] B --> C[交换 → 3, 5, 8, 4, 2] C --> D[比较5和8 → 不交换] D --> E[比较8和4 → 交换 → 3, 5, 4, 8, 2] E --> F[比较8和2 → 交换 → 3, 5, 4, 2, 8] F --> G[第一轮结束,8已就位] G --> H[第二轮: 比较3和5 → 不交换] H --> I[比较5和4 → 交换 → 3, 4, 5, 2, 8] I --> J[比较5和2 → 交换 → 3, 4, 2, 5, 8] J --> K[第二轮结束,5已就位] K --> L[...继续直到完全有序] </mermaid> == 总结 == 冒泡排序是一种基础的排序算法,适合初学者理解排序的基本逻辑。尽管其时间复杂度较高,但通过优化(如提前终止)可提升部分场景下的性能。实际开发中,更高效的算法(如快速排序、归并排序)通常优先被采用。 [[Category:计算机科学]] [[Category:数据结构与算法]] [[Category:排序算法]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)