Python深度理解系列之【排序算法——冒泡排序】

读者大大们好呀!!!☀️☀️☀️


👀期待大大的关注哦❗️❗️❗️
🚀欢迎收看我的主页文章➡️木道寻的主页

文章目录

🔥前言


冒泡排序算法的基本思想是通过重复遍历待排序的数列,比较每对相邻元素,如果它们的顺序错误(根据元素排序规则来说)就把它们交换过来。这个过程中,较小的元素会像气泡一样逐渐"浮"到数列的顶端,也就是数列的前端。这个过程会重复进行,直到数列被排序完成

🚀冒泡排序python实现

历史:

关于冒泡排序算法的创造历史,据称在1960年,英国计算机科学家霍尔(Tony Hoare)在参加英国国家物理实验室的俄文机械翻译项目时,为了提高翻译效率而提出了冒泡排序算法。这个算法以其稳定性和简单性而著称,尽管这个说法存在,但没有确凿的实证来支持这一点。

算法实现

1、冒泡排序代码python实现

python 复制代码
def bubble_sort(arr):
    n = len(arr)
    # 遍历所有数组元素
    for i in range(n):
        # Last i elements are already in place
        for j in range(0, n-i-1):
            # 遍历数组从0到n-i-1
            # 交换如果元素大于下一个元素
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]

2、运行结果

图形化算法展示

1、matplotlib图形化展示

代码如下:

python 复制代码
import matplotlib.pyplot as plt

def bubble_sort(arr):
    n = len(arr)
    plt.ion()  # 开启交互模式
    for i in range(n):
        for j in range(1, n-i):
            if arr[j-1] > arr[j]:
                arr[j-1], arr[j] = arr[j], arr[j-1]  # 交换元素
                plt.clf()  # 清除之前的图形
                plt.plot(arr, 'ro-')  # 绘制当前数组状态
                plt.title('Bubble Sort Animation')
                plt.draw()  # 绘制更新
                plt.pause(1)  # 暂停一段时间,以便观察

# 创建一个待排序的数组
arr = [64, 34, 25, 12, 22, 11, 90]
# arr = []
# num = int(input("请输入需要排序的数字个数:"))
# print("请依次输入需要排序的数字\n")
# for i in range(num):
#     arr.append(int(input(f"第{i+1}个数:")))
# print("原始数组:")
# print(arr)
#
# bubble_sort(arr)
# print("排序后的数组:")
# print(arr)

# 原始数组的图形绘制
plt.figure(figsize=(10, 5))
plt.plot(arr, 'ro-', markersize=8)
plt.title('original data')
plt.grid(True)
plt.show()
plt.ioff()

# 开始冒泡排序并动态绘制
bubble_sort(arr.copy())  # 使用数组的副本以保留原始数组用于比较

# 排序后的数组图形绘制
plt.plot(arr, 'go-', markersize=8)  # 使用绿色表示排序后的数组
plt.title('Sorting raw data')
plt.grid(True)
plt.show()
plt.ioff()  # 关闭图形交互模式

图形显示结果:

⭐️⭐️⭐️总结

冒泡排序(Bubble Sort)是一种简单直观的排序算法,它通过重复遍历待排序的数列,比较每对相邻元素的大小,并在必要时交换它们的位置。以下是冒泡排序的几个关键点总结:

1️⃣算法原理:

通过相邻元素的比较和交换,使得每一轮遍历后,数列中的最大(或最小)元素"冒泡"到它应该在的位置。

2️⃣稳定性:

冒泡排序是一种稳定的排序算法,因为它不会改变相同元素之间的相对顺序。

3️⃣时间复杂度:

最好情况(已经是排序状态):O(n),只需要遍历一次就发现没有元素交换,立即结束。

最坏情况(完全逆序):O(n^2),需要进行n-1次遍历。

平均情况:O(n^2)。

4️⃣空间复杂度:

空间复杂度为O(1),因为它是一种原地排序算法,不需要额外的存储空间。

实现方式:

可以使用两次嵌套循环实现,外层循环控制遍历次数,内层循环进行相邻元素的比较和交换。

✈️✈️✈️如果喜欢这篇文章的话
🙏大大们可以动动发财的小手:
👉👉👉 点赞:👍收藏:⭐️评论:✍️👈👈👈

相关推荐
雪碧聊技术1 分钟前
上午题_计算机系统
java·开发语言
Mr_pyx1 分钟前
CompletableFuture 使用全攻略:从异步编程到异常处理
linux·前端·python
纤纡.2 分钟前
解锁 Python 实用编程技巧:线程、视觉识别、正则匹配与装饰器实战
开发语言·python·深度学习·opencv
WL_Aurora4 分钟前
如何将 Jupyter Notebook (.ipynb) 文件转换为 Python (.py) 文件
python·jupyter
小范馆7 分钟前
文档并生成知识库
python
t***5447 分钟前
如何在Dev-C++中配置Clang编译器
开发语言·c++
逆境不可逃8 分钟前
一篇速通RabbitMQ (从入门到生产实战:核心原理、高级特性与 Spring Boot 集成全解)
开发语言·后端·ruby
qq_2837200511 分钟前
Python3 模块精讲|python-docx 万字实战:全自动读写 Word 文档,办公效率直接翻倍
python·自动化·word
yuanpan12 分钟前
Python Pandas 库入门:介绍与基本使用教程
开发语言·python·pandas
m0_5150984212 分钟前
如何排查RAC节点被驱逐Eviction_CSS日志与宕机重启原因分析
jvm·数据库·python