首页 > Python资料 博客日记
Python深度理解系列之【排序算法——冒泡排序】
2024-07-09 01:00:03Python资料围观162次
Python资料网推荐Python深度理解系列之【排序算法——冒泡排序】这篇文章给大家,欢迎收藏Python资料网享受知识的乐趣
读者大大们好呀!!!☀️☀️☀️
🔥前言
冒泡排序算法的基本思想是通过重复遍历待排序的数列,比较每对相邻元素,如果它们的顺序错误(根据元素排序规则来说)就把它们交换过来。这个过程中,较小的元素会像气泡一样逐渐“浮”到数列的顶端,也就是数列的前端。
这个过程会重复进行,直到数列被排序完成
🚀冒泡排序python实现
历史:
关于冒泡排序算法的创造历史,据称在1960年,英国计算机科学家霍尔(Tony Hoare)在参加英国国家物理实验室的俄文机械翻译项目时,为了提高翻译效率而提出了冒泡排序算法。这个算法以其稳定性和简单性而著称,尽管这个说法存在,但没有确凿的实证来支持这一点。
算法实现
1、冒泡排序代码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图形化展示
代码如下:
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),因为它是一种原地排序算法,不需要额外的存储空间。
实现方式:
可以使用两次嵌套循环实现,外层循环控制遍历次数,内层循环进行相邻元素的比较和交换。
✈️✈️✈️如果喜欢这篇文章的话
🙏大大们可以动动发财的小手:👉👉👉 点赞:👍收藏:⭐️评论:✍️👈👈👈
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 光流法结合深度学习神经网络的原理及应用(完整代码都有Python opencv)
- Python 图像处理进阶:特征提取与图像分类
- 大数据可视化分析-基于python的电影数据分析及可视化系统_9532dr50
- 【Python】入门(运算、输出、数据类型)
- 【Python】第一弹---解锁编程新世界:深入理解计算机基础与Python入门指南
- 华为OD机试E卷 --第k个排列 --24年OD统一考试(Java & JS & Python & C & C++)
- Python已安装包在import时报错未找到的解决方法
- 【Python】自动化神器PyAutoGUI —告别手动操作,一键模拟鼠标键盘,玩转微信及各种软件自动化
- Pycharm连接SQL Sever(详细教程)
- Python编程练习题及解析(49题)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- Anaconda版本和Python版本对应关系(持续更新...)
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程