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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/766818.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

师傅们 ~ 2024HW一手资料

各位师傅们,2024HW来了! 从2026年开始,随着我国对网络安全的重视,涉及单位不断增加,越来越多单位和个人都加入到HW当中。 2024HW就在眼前, 那么还有不了解或者还没投简历面试的朋友们,需要注意…

职升网:中级会计师考试难度是怎样的?

中级会计师考试确实被普遍认为是具有一定难度的考试。以下是我对其难度的分析: 一、知识体系的广泛性 中级会计师考试覆盖的内容十分广泛,包括但不限于财务管理、财务会计、成本会计、税法等。这就要求考生具备扎实的基础知识和广泛的知识面&#xff0…

咨询公司在推行TPM管理中有哪些不可替代的作用?

TPM管理作为一种先进的生产维护理念,正逐渐成为企业追求卓越生产性能的不二之选。在这场转型升级的浪潮中,咨询公司扮演着不可替代的角色,它们如何助力企业成功推行TPM管理,成为了我们今天要探讨的焦点。 一、专业引领&#xff0c…

在Ubuntu 22.04 LTS 上安装 MySQL两种方式:在线方式和离线方式

Ubuntu安装MySQL 介绍: Ubuntu 是一款基于Linux操作系统的免费开源发行版,广受欢迎。它以稳定性、安全性和用户友好性而闻名,适用于桌面和服务器环境。Ubuntu提供了大量的软件包和应用程序,拥有庞大的社区支持和活跃的开发者社区…

五、【源码】资源加载器

源码地址:https://github.com/spring-projects/spring-framework 仓库地址:https://gitcode.net/qq_42665745/spring/-/tree/05-resource-loader 资源加载器 流程: 1.初始化BeanFactory 2.创建XmlBeanDefinitionReader用于从 XML 文件中读…

LoadRunner初学篇

我也是初学,写一篇文章记录下过程及心得,有不同建议的大佬可评价,感谢提携 这是什么 LoadRunner,是一种预测系统行为和性能的负载测试工具。通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,Loa…

焦化厂甲烷气体监测:甲烷传感器如何选择?

在焦化厂的日常运营中,煤的高温干馏和石油的渣油焦炭化是两大关键工艺。这些过程中,不仅产生了众多我们日常生活所需的化学产品,如糖精、焦油、沥青等,还伴随着大量焦炉煤气的生成。然而,这些煤气中含有的高浓度甲烷等…

坑——python的redis库的decode_responses设置

python的redis库查询返回的值默认是返回字节串,可以在redis.Redis()方法中通过设置decode_responses参数,让返回值直接是字符串; 查询返回字节串是因为Redis()方法中decode_responses默认值是False: 设置decode_responses为True就…

解决“Undefined control sequence. \hline”

解决“Undefined control sequence. \hline” Q:创建表格时显示错误“Undefined control sequence. \Xhline”A:解决方法C介绍\usepackage{makecell}作用使用方法示例其他功能总结 Q:创建表格时显示错误“Undefined control sequence. \Xhline” MTMAGVDPP.tex: 错误: 211: Un…

开源TTS模型支持中日韩并可以微调自己的声音模型;微软开源的知识图谱RAG;RAG和LLMs构建的搜索应用程序

✨ 1: Fish Speech Fish Speech 开源TTS模型支持中日韩,语音合成不止于自然 Fish Speech 是一个开源的语音生成项目,致力于开发和改进语音合成技术。项目最新稳定版本为1.1.2,并正在向1.2版本更新中。 Fish Speech 虽然仅为亿级参数的模型&…

huggingface datasets 数据集下载

pip install datasets但是国内下载一般由于网络下载失败:ConnectionError: Couldn’t reach ‘reach-vb/pokemon-blip-captions’ on the Hub (ConnectionError) 解决办法(先vp*下载): 下载使用 from datasets import Dataset, …

Cube-Studio:开源大模型全链路一站式中台

开源项目,欢迎star哦,https://github.com/data-infra/cube-studio 一款真正意义的 LLMOps 框架 LLMOps(Large Language Model Operations)是一个涵盖了大型语言模型(如GPT系列)开发、部署、维护和优化的一…

海外报纸媒体投放形式分为哪些?传播当中有什么优势-大舍传媒

国外报纸媒体投放新闻稿作为一种传统而有效的传播方式,依然在现代媒体环境中保持着其独特的价值和权威性。以下几点阐述了报纸媒体宣发的几个关键方面,特别是当通过专业机构如大舍传媒进行操作时: 权威性和公信力:报纸作为历史悠久…

使用瀚高数据库开发管理工具进行数据的备份与恢复---国产瀚高数据库工作笔记008

使用瀚高数据库,备份 恢复数据 然后找到对应的目录 其实就是hgdbdeveloper,瀚高的数据库开发管理工具 对应的包中有个dbclient 这个目录,选中这个目录以后,就可以了,然后 在对应的数据库,比如 data_middle 中,选中 某个模式,比如bigdata_huiju 然后右键进行,点击 恢复,然…

pycharm的usages在哪设置?

参考文章:https://blog.51cto.com/save/8961821 在代码编辑器(如PyCharm或IntelliJ IDEA)中,"1 usage"通常表示当前光标所在的代码元素(如变量、函数、类等)在其他地方被使用了一次。这个功能可…

springboot java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver 应该如何解决

遇到的问题:项目中引用了外部的达梦jar包 在idea中正常使用 也能找到dm.jdbc.driver.DmDriver 驱动 但是当通过jenkins 构建部署到服务器上 总是报 ClassNotFoundException: dm.jdbc.driver.DmDriver 找不到驱动 应用到的驱动代码如下格式 排查步骤 1.首先看你的项…

怎么将视频字幕提取翻译?字幕提取的方法大全来了

谁说提取视频字幕非得大费周章?其实用专业软件也能轻松搞定字幕转换,让你告别传统繁琐的转文字工作! 想象一下,简单的几个步骤,你的视频就能从屏幕上的文字转化为可编辑的文档。是不是已经迫不及待想要尝试了&#xf…

基于SpringBoot的漫画网站系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:B/S架构模式、Java技术 工具:Visual Studio、MySQL数据库开发工具 系统展示 首页 用户…

Nginx主配置文件---Nginx.conf

nginx主配置文件的模块介绍 全局块: 全局块是配置文件从开始到 events 块之间的部分,其中指令的作用域是 Nginx 服务器全局。主要指令包括: user:指定可以运行 Nginx 服务的用户和用户组,只能在全局块配置。例如&…

Linux基础指令介绍与详解——原理学习

前言:本节内容标题虽然为指令,但是并不只是讲指令, 更多的是和指令相关的一些原理性的东西。 如果友友只想要查一查某个指令的用法, 很抱歉, 本节不是那种带有字典性质的文章。但是如果友友是想要来学习的,…