【python】冒泡法--详细讲解(python实现)

简介: 【python】冒泡法--详细讲解(python实现)


👉博__主👈:米码收割机

👉技__能👈:C++/Python语言

👉公众号👈:测试开发自动化【获取源码+商业合作】

👉荣__誉👈:阿里云博客专家博主、51CTO技术博主

👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。



1. 原理说明

冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的列表,比较相邻的元素,并根据需要交换它们的位置,直到整个列表排序完成为止。冒泡排序的原理可以简单概括为以下步骤:

  1. 比较相邻元素:从列表的第一个元素开始,依次比较相邻的两个元素,比较的方式取决于排序的顺序(升序或降序)。
  2. 交换位置:如果相邻两个元素的顺序不符合排序要求,则交换它们的位置,将较大(或较小)的元素放在后面。
  3. 继续遍历:重复执行步骤 1 和步骤 2,直到遍历完整个列表。每一轮遍历都会将最大(或最小)的元素移动到列表的末尾。
  4. 缩小范围:在每一轮遍历后,列表的最后一个元素已经排好序,因此在下一轮遍历时可以减少一个元素的比较次数。

这个过程类似于气泡冒上水面的过程,每一次遍历都会让最大(或最小)的元素“冒泡”到合适的位置,因此得名“冒泡排序”。


2. 举例说明

给定列表 a = [9, 8, 10, 5, 7, 3, 5, 2, 6],我们使用冒泡排序进行升序排序:

第一轮遍历: 比较 [9, 8, 10, 5, 7, 3, 5, 2, 6]

9 > 8,交换位置得到  [8, 9, 10, 5, 7, 3, 5, 2, 6]
9 < 10,位置不变     [8, 9, 10, 5, 7, 3, 5, 2, 6]
10 > 5,交换位置得到 [8, 9, 5, 10, 7, 3, 5, 2, 6]
10 > 7,交换位置得到 [8, 9, 5, 7, 10, 3, 5, 2, 6]
10 > 3,交换位置得到 [8, 9, 5, 7, 3, 10, 5, 2, 6]
10 > 5,交换位置得到 [8, 9, 5, 7, 3, 5, 10, 2, 6]
10 > 2,交换位置得到 [8, 9, 5, 7, 3, 5, 2, 10, 6]
10 > 6,交换位置得到 [8, 9, 5, 7, 3, 5, 2, 6, 10]

第一轮遍历结束后,最大的元素 10 已经“冒泡”到了最后的位置。

第二轮遍历:比较 [8, 9, 5, 7, 3, 5, 2, 6, 10]

8 < 9,位置不变     [8, 9, 5, 7, 3, 5, 2, 6, 10]
9 > 5,交换位置得到 [8, 5, 9, 7, 3, 5, 2, 6, 10]
9 > 7,交换位置得到 [8, 5, 7, 9, 3, 5, 2, 6, 10]
9 > 3,交换位置得到 [8, 5, 7, 3, 9, 5, 2, 6, 10]
9 > 5,交换位置得到 [8, 5, 7, 3, 5, 9, 2, 6, 10]
9 > 2,交换位置得到 [8, 5, 7, 3, 5, 2, 9, 6, 10]
9 > 6,交换位置得到 [8, 5, 7, 3, 5, 2, 6, 9, 10]

第二轮遍历结束后,第二大的元素 9 也“冒泡”到了倒数第二个位置。

第三轮遍历:比较 [8, 5, 7, 3, 5, 2, 6, 9, 10]

8 > 5,交换位置得到 [5, 8, 7, 3, 5, 2, 6, 9, 10]
8 > 7,交换位置得到 [5, 7, 8, 3, 5, 2, 6, 9, 10]
8 > 3,交换位置得到 [5, 7, 3, 8, 5, 2, 6, 9, 10]
8 > 5,交换位置得到 [5, 7, 3, 5, 8, 2, 6, 9, 10]
8 > 2,交换位置得到 [5, 7, 3, 5, 2, 8, 6, 9, 10]
8 > 6,交换位置得到 [5, 7, 3, 5, 2, 6, 8, 9, 10]

第三轮遍历结束后,第三大的元素 8 也“冒泡”到了倒数第三个位置。

依次类推,经过多轮遍历,列表中的元素逐渐排好序,直到整个列表排序完成。

注意:冒泡排序是一种简单但效率较低的排序算法,特别是在处理大量数据时,它的时间复杂度为 O(n^2)。其他更高效的排序算法如快速排序和归并排序通常更受青睐。


3. 代码实现

代码如下(示例):

a = [9, 8, 10, 5, 7, 3, 5, 2, 6]
def arr_sorted(a):
    n = len(a)
    for i in range(n):
        for j in range(n-1-i):
            if a[j] > a[j+1]:
                a[j], a[j + 1] = a[j+1], a[j]
    return a
print(arr_sorted(a))

运行结果:

[9, 8, 10, 5, 7, 3, 5, 2, 6]


相关文章
|
机器学习/深度学习 算法 搜索推荐
Python 内置数据结构及排序、冒泡算法|学习笔记
快速学习 Python 内置数据结构及排序、冒泡算法
125 0
Python 内置数据结构及排序、冒泡算法|学习笔记
|
搜索推荐 算法 测试技术
笨办法学 Python · 续 练习 16:冒泡、快速和归并排序
练习 16:冒泡、快速和归并排序 原文:Exercise 16: Bubble, Quick, and Merge Sort 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你现在将尝试为你的DoubleLinkedList数据结构实现排序算法。
1624 0
|
6天前
|
Python
Python编程中的异常处理:理解与实践
【9月更文挑战第14天】在编码的世界里,错误是不可避免的。它们就像路上的绊脚石,让我们的程序跌跌撞撞。但是,如果我们能够预见并优雅地处理这些错误,我们的程序就能像芭蕾舞者一样,即使在跌倒的边缘,也能轻盈地起舞。本文将带你深入了解Python中的异常处理机制,让你的代码在面对意外时,依然能保持优雅和从容。
143 73
|
6天前
|
人工智能 数据挖掘 数据处理
揭秘Python编程之美:从基础到进阶的代码实践之旅
【9月更文挑战第14天】本文将带领读者深入探索Python编程语言的魅力所在。通过简明扼要的示例,我们将揭示Python如何简化复杂问题,提升编程效率。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往高效编码世界的大门。让我们开始这段充满智慧和乐趣的Python编程之旅吧!
|
5天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从零基础到实战应用
【9月更文挑战第15天】本文将引导读者从零开始学习Python编程,通过简单易懂的语言和实例,帮助初学者掌握Python的基本语法和常用库,最终实现一个简单的实战项目。文章结构清晰,分为基础知识、进阶技巧和实战应用三个部分,逐步深入,让读者在学习过程中不断积累经验,提高编程能力。
|
1天前
|
数据可视化 Python
Python编程中的数据可视化技术
【9月更文挑战第19天】在数据驱动的时代,将复杂的数据集转化为直观易懂的视觉表达至关重要。本文将深入探索Python中的数据可视化库,如Matplotlib和Seaborn,并指导读者如何运用这些工具来揭示数据背后的模式和趋势。文章不仅会介绍基础图表的绘制方法,还将讨论高级技巧以提升图表的信息丰富度和吸引力。
|
6天前
|
机器学习/深度学习 数据采集 人工智能
探索Python的奥秘:从基础到进阶的编程之旅
在这篇文章中,我们将深入探讨Python编程的基础知识和进阶技巧。通过清晰的解释和实用的示例,无论您是编程新手还是有经验的开发者,都能从中获得有价值的见解。我们将覆盖从变量、数据类型到类和对象的各个方面,助您在编程世界里游刃有余。
23 10
|
2天前
|
人工智能 数据挖掘 开发者
Python编程入门:从基础到实战
【9月更文挑战第18天】本文将带你走进Python的世界,从最基本的语法开始,逐步深入到实际的项目应用。无论你是编程新手,还是有一定基础的开发者,都能在这篇文章中找到你需要的内容。我们将通过详细的代码示例和清晰的解释,让你轻松掌握Python编程。
15 5
|
4天前
|
存储 机器学习/深度学习 数据挖掘
深入浅出:Python编程入门与实践
【9月更文挑战第16天】本文以“深入浅出”的方式,引领读者步入Python编程的世界。从基础语法到实际应用,我们将一步步探索Python的魅力所在。无论你是编程新手,还是希望拓展技能的老手,这篇文章都将为你提供有价值的信息和指导。通过本文的学习,你将能够编写出简单而实用的Python程序,为进一步深入学习打下坚实的基础。让我们一起开始这段编程之旅吧!