当前位置: 首页 > news >正文

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 placefor 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 pltdef 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),因为它是一种原地排序算法,不需要额外的存储空间。
实现方式:

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

✈️✈️✈️如果喜欢这篇文章的话

🙏大大们可以动动发财的小手:
👉👉👉 点赞:👍收藏:⭐️评论:✍️👈👈👈

相关文章:

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

读者大大们好呀!!!☀️☀️☀️ 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️木道寻的主页 文章目录 🔥前言🚀冒泡排序python实现算法实现图形化算法展示 ⭐️⭐️⭐️总结 🔥前…...

边界框在目标检测中的作用与应用

目标检测是计算机视觉领域的核心任务之一,旨在从图像或视频中识别和定位感兴趣的目标。边界框(Bounding Box)是目标检测中常用的一种表示方法,用于确定目标在图像中的确切位置。本文将详细探讨边界框的概念、它在目标检测中的角色…...

linux 环境报错:Peer reports incompatible or unsupported protocol version

出现问题的原因: curl 不兼容或不支持的协议版本。 解决方案: yum update -y nss curl libcurl如此继续之前的操作即可。...

深入解析:Java爬虫的本质是什么?

深入解析:Java爬虫的本质是什么? 引言: 随着互联网的快速发展,获取网络数据已成为许多应用场景中的重要需求。而爬虫作为一种自动化程序,能够模拟人类浏览器的行为,从网页中提取所需信息,成为了…...

【Matlab 六自由度机器人】机器人动力学之推导拉格朗日方程(附MATLAB机器人动力学拉格朗日方程推导代码)

【Matlab 六自由度机器人】机器人动力学概述 近期更新前言正文一、拉格朗日方程的推导1. 单自由度系统2. 单连杆机械臂系统3. 双连杆机械臂系统 二、MATLAB实例推导1. 机器人模型的建立2. 动力学代码 总结参考文献 近期更新 【汇总】 【Matlab 六自由度机器人】系列文章汇总 …...

线下生鲜蔬果店做小程序有什么方法

生鲜蔬果是生活所需,大小商家众多,零售批发各种经营模式,小摊贩或是超市门店都有着目标客户或准属性群体。竞争和获客转化也促进着商家寻找客源和加快线上进程。 尤其是以微信社交为主的私域场景,普客/会员都需要精细化管理营收和…...

几种linux开机自启脚本的方法

几种linux开机自启脚本的方法 1. 脚本添加到init.d目录中2. 创建服务service(推荐)3. /etc/profile & /etc/profile.d(不推荐)4. /etc/rc.local 本文以启动jenkins节点为例,需要持久连接,实现开机自启 …...

Qt开发笔记:Qt3D三维开发笔记(一):Qt3D三维开发基础概念介绍

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/140059315 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、O…...

Firewalld 防火墙基础

Firewalld 防火墙基础 一、Firewalld概述firewalld 简介firewalld 和 iptables 的关系firewalld 与 iptables service 的区别 二、Firewalld 网络区域区域介绍Firewalld数据处理流程 三、Firewalld 防火墙的配置方法firewall-config 图形工具“区域”选项卡“服务”选项卡改变防…...

针对 Windows 10 的功能更新,版本 22H2 - 错误 0xc1900204

最近想帮女朋友生win11发现她电脑安装更新总是卡到安装%10这里失败 原来是安装路径被修改过了,改回c盘 win R → 输入regedit 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion...

goframe框架规范限制(but it should be named with “Res“ suffix like “XxxRes“)

背景: 首页公司最近要启动一个项目,公司主要业务是用java开发的,但是目前这个方向的项目,公司要求部署在主机上,就是普通的一台电脑上,电脑配置不详,还有经常开关机,所以用java面临…...

格式化选NTFS还是exFAT 格式化NTFS后Mac不能用怎么办 移动硬盘格式化ntfs和exfat的区别

面对硬盘、U盘或移动硬盘的格式化决策,NTFS与exFAT作为主流的文件系统,用户在选择时可以根据它们的不同特点来选择适用场景。下面我们来看看格式化选NTFS还是exFAT,格式化NTFS后Mac不能用怎么办的相关内容。 一、格式化选NTFS还是exFAT 在数…...

中国桥梁空间分布数据

2020年中国桥梁空间分布数据,共包含102000余条数据。 数据属性表包括:地级市名、区县名、桥梁名称和经纬度。有shp和EXCEl两种格式数据。目前暂没有广西、广东和台湾三个省份数据。...

14-15 为什么我们现在对阅读如此难以接受

写出来感觉很奇怪,但最近我感觉自己失去了阅读能力。长篇文本对我来说尤其具有挑战性。句子很难读完。更别提章节了。章节有很多段落,而段落又由许多句子组成。 啊。 即使在极少数情况下,我读完了一章,下一页上已经有另一章等着…...

经典的卷积神经网络模型 - ResNet

经典的卷积神经网络模型 - ResNet flyfish 2015年,何恺明(Kaiming He)等人在论文《Deep Residual Learning for Image Recognition》中提出了ResNet(Residual Network,残差网络)。在当时,随着…...

【Git 学习笔记】1.3 Git 的三个阶段

1.3 Git 的三个阶段 由于远程代码库后续存在新的提交,因此实操过程中的结果与书中并不完全一致。根据书中 HEAD 指向的 SHA-1:34acc370b4d6ae53f051255680feaefaf7f7850d,可通过以下命令切换到对应版本,并新建一个 newdemo 分支来…...

华为DCN之:SDN和NFV

1. SDN概述 1.1 SDN的起源 SDN(Software Defined Network)即软件定义网络。是由斯坦福大学Clean Slate研究组提出的一种新型网络创新架构。其核心理念通过将网络设备控制平面与数据平面分离,从而实现了网络控制平面的集中控制,为…...

黑马头条-数据管理平台

目录 项目准备 验证码登录 验证码登录-流程 token 的介绍 个人信息设置和 axios 请求拦截器 axios 响应拦截器和身份验证失败 优化-axios 响应结果 发布文章-富文本编辑器 项目准备 技术: • 基于 Bootstrap 搭建网站标签和样式 • 集成 wangEditor 插件…...

API Object设计模式

API测试面临的问题 API测试由于编写简单,以及较高的稳定性,许多公司都以不同工具和框架维护API自动化测试。我们基于seldom框架也积累了几千条自动化用例。 •简单的用例 import seldomclass TestRequest(seldom.TestCase):def test_post_method(self…...

Python 爬虫:多进程,多线程爬虫<提高爬取效率>

关于多进程,多线程的知识,请自行查询资料补充 ~~~~~~~~~~~ 使用多进程: 在python中,使用多进程需要先导包: from threding import Threaddef work(name):for i in range(1000):print(f"我是线程:{n…...

告别网盘客户端!用Alist+RaiDrive把百度云盘变成电脑本地文件夹(保姆级图文教程)

用AlistRaiDrive实现网盘本地化管理的终极方案 你是否厌倦了电脑上安装多个网盘客户端,不仅占用系统资源,操作还繁琐割裂?每次上传下载文件都要在不同客户端间切换,效率低下。现在,通过Alist和RaiDrive的组合&#xf…...

智能手机相机光谱特性测量与多光谱成像技术

1. 智能手机相机光谱特性测量基础智能手机相机的光谱灵敏度函数(Spectral Sensitivity Function, SSF)和透射率函数是计算摄影领域的核心参数,它们决定了设备对光信号的响应特性。准确获取这些参数对色彩还原、光谱重建和白平衡校准等任务至关重要。1.1 光谱灵敏度函…...

自制BLE112串口编程器:基于Bootloader的免调试器烧录方案

1. 项目概述:为BLE112模块打造一款免调试器的RS232编程器在嵌入式开发,特别是早期的蓝牙低功耗(BLE)模块应用中,我们常常会遇到一个棘手的问题:官方开发工具链的依赖和限制。以Silicon Labs(当时…...

告别外部中断!用EnableInterrupt库轻松搞定Arduino Nano多通道PWM读取(附完整代码)

Arduino Nano多通道PWM读取实战:用EnableInterrupt突破硬件限制当你用Arduino Nano开发四轴飞行器或机器人项目时,是否遇到过这样的尴尬:遥控器的四个通道PWM信号需要同时读取,但Nano只有两个外部中断引脚?这个问题困扰…...

全链路压测实战:双十一级别的流量,我是这样扛住的

作为一名在质量保障领域摸爬滚打多年的测试工程师,我深知传统的单接口压测在如今分布式架构下的无力感。当业务流量达到双十一这种脉冲式、高并发的级别时,任何一个非核心链路上的“短板”都可能引发系统性的雪崩。全链路压测不再是选择题,而…...

使用TaotokenCLI工具一键配置开发环境中的API密钥

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken CLI工具一键配置开发环境中的API密钥 在团队协作或个人开发中,为每个项目或成员手动配置大模型API密钥和…...

ComfyUI-Manager完整指南:如何轻松管理你的AI工作流扩展库

ComfyUI-Manager完整指南:如何轻松管理你的AI工作流扩展库 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various c…...

DeepSeek安全测试辅助Prompt工程白皮书(含17个CVE靶场验证指令模板)

更多请点击: https://intelliparadigm.com 第一章:DeepSeek安全测试辅助 DeepSeek系列大模型在代码生成、漏洞模式识别与安全上下文理解方面展现出独特优势,可作为安全测试工程师的智能协作者。其对OWASP Top 10、CWE分类体系及常见PoC结构具…...

ComfyUI-Manager完全指南:掌握AI工作流管理的核心技术

ComfyUI-Manager完全指南:掌握AI工作流管理的核心技术 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various custo…...

遭遇薪酬倒挂后的反向谈判与资产重估策略「蒸汽求职分享」

在 2026 年全球科技大厂与跨国泛金融巨头追求极致人效、频繁进行组织架构重组(Reorg)的买方市场中,一个让无数海外名校留学生在入职两年后心态瞬间崩塌的现象,正在高频发生——“薪酬倒挂(Salary Inversion&#xff09…...