【Python探索之旅】冒泡排序(三种方法)

前言

算法步骤:

 代码实现

方法一、嵌套循环

方法二 while循环

 方法三、使用生成器表达式

解释:

时间复杂度:

 完结撒花

前言

冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻的元素可以交换,就表明完成了排序。

算法步骤:

  1. 从列表的第一个元素开始,比较它与下一个元素。
  2. 如果第一个元素大于第二个元素,则交换它们的顺序。
  3. 继续比较相邻元素,直到到达列表的末尾。
  4. 重复步骤 1-3,直到列表中所有元素都按从小到大的顺序排列。

给定一个列表 [5, 3, 1, 2, 4],使用冒泡排序对其进行排序:

nums = [5, 3, 1, 2, 4]

第 1 次循环:

  • 比较 5 和 3,交换它们的位置,得到 [3, 5, 1, 2, 4]
  • 比较 5 和 1,交换它们的位置,得到 [3, 1, 5, 2, 4]
  • 比较 5 和 2,交换它们的位置,得到 [3, 1, 2, 5, 4]
  • 比较 5 和 4,不交换,因为 5 已经大于 4。

第 2 次循环:

  • 比较 3 和 1,交换它们的位置,得到 [1, 3, 2, 5, 4]
  • 比较 3 和 2,交换它们的位置,得到 [1, 2, 3, 5, 4]
  • 比较 3 和 5,不交换,因为 3 已经小于 5。
  • 比较 5 和 4,交换它们的位置,得到 [1, 2, 3, 4, 5]

第 3 次循环:

  • 比较 1 和 2,不交换,因为 1 已经小于 2。
  • 比较 2 和 3,不交换,因为 2 已经小于 3。
  • 比较 3 和 4,不交换,因为 3 已经小于 4。
  • 比较 4 和 5,不交换,因为 4 已经小于 5。

经过 3 次循环,列表中的元素已经按从小到大的顺序排列好了:[1, 2, 3, 4, 5]

 代码实现

方法一、嵌套循环

def bubble_sort(nums):for i in range(len(nums)):for j in range(0, len(nums) - i - 1):if nums[j] > nums[j + 1]:nums[j], nums[j + 1] = nums[j + 1], nums[j]return nums

方法二 while循环

def bubble_sort(nums):swapped = Truewhile swapped:swapped = Falsefor i in range(0, len(nums) - 1):if nums[i] > nums[i + 1]:nums[i], nums[i + 1] = nums[i + 1], nums[i]swapped = Truereturn nums

 方法三、使用生成器表达式

def bubble_sort(nums):while True:swapped = Falsefor i in range(0, len(nums) - 1):if nums[i] > nums[i + 1]:nums[i], nums[i + 1] = nums[i + 1], nums[i]swapped = Trueif not swapped:breakreturn nums

解释:

  • 该方法使用两个嵌套的循环,类似于方法 1。
  • 外层循环用于跟踪排序的趟数。
  • 内层循环用于比较相邻元素并进行交换。
  • swapped 变量用于跟踪是否在当前趟中进行了任何交换。
  • 如果在某趟中没有进行任何交换,则说明列表已经排序好,算法提前终止。

最后排序结果

nums = [5, 3, 1, 2, 4]
print(bubble_sort(nums))  # 输出:[1, 2, 3, 4, 5]

时间复杂度:

冒泡排序的时间复杂度为 O(n^2),其中 n 是列表的长度。这是因为算法需要比较和交换列表中的每个元素,而这需要 O(n) 的时间。对于每个元素,算法需要比较和交换它与列表中其他所有元素,这又需要 O(n) 的时间。因此,总的时间复杂度为 O(n^2)

 优点:

  • 简单易懂,实现方便。
  • 对数据没有特殊要求,可以处理各种类型的列表。

缺点:

  • 时间复杂度高,对于大型列表排序效率较低。
  • 稳定性差,即相同元素在排序后的顺序不确定。

 完结撒花

本期为大家带来了Python冒泡排序法的解题思路,因为仅仅只是学习,不敲代码逻辑思维能力是上不去的,所以发了一期Python版的冒泡排序法的算法题,通过练习,才可以提升在编程中的编码能力和逻辑思维能力。

  如果对博主感兴趣欢迎大家点赞+关注,添加博主联系方式一起探索哦!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年第十一届北京国际印刷技术展览会

2025年第十一届北京国际印刷技术展览会 展览时间:2025年5月15-19日 展览地点:北京中国国际展览中心(顺义馆) 主办单位:中国印刷及设备器材工业协会中国国际展览中心集团有限公司 承办单位:北京中印协华港国…

海思Hi3065H 200MHz 高性能 RISCV32 A² MCU

这是一款海思自研的RISCV32内核的高性能实时控制专用MCU, 具有高性能、高集成度、高可靠性、易开发的特点,同时还有嵌入式AI能力。 CPU • RISC-V200MHzFPU 存储 • Up to 152KB Code Flash • 8KB Data Flash • 16KB SRAM 个人认为这是MCU梯队非常…

[Linux][网络][高级IO][IO多路转接][select][poll]详细讲解

目录 1.IO多路转接之select1.初识select2.select()3.关于fd_set结构4.关于timeval结构5.理解select执行过程6.select就绪条件7.select特点8.select优点(任何一个多路转接方案,都具备)9.select缺点10.select的一般编写代码的模式11.思考 && 问题 2.IO多路转接…

【PB案例学习笔记】-02 目录浏览器

写在前面 这是PB案例学习笔记系列文章的第二篇,该系列文章适合具有一定PB基础的读者, 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上…

基于Django实现的(bert)深度学习文本相似度检测系统设计

基于Django实现的(bert)深度学习文本相似度检测系统设计 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 登录页面 注册页面:用户账号,密码…

05-14 周二 PyTorch动态量化和静态量化理解

05-14 周二 PyTorch动态量化和静态量化理解 时间版本修改人描述2024年5月14日10:44:30V0.1宋全恒新建文档2024年5月14日16:28:16V1.0宋全恒填充了PyTorch对于两种量化方式的内容 简介 Pytorch动态量化 设计神经网络时,可以进行许多权衡。在模型开发和训练期间&…

Dilworth定理:最少的下降序列个数就等于整个序列最长上升子序列的长度

概念如下&#xff1a; 狄尔沃斯定理_百度百科 (baidu.com) 本质就是找要求序列中最长的单调的子序列&#xff08;不一定连续&#xff09;的长度。 模板如下&#xff1a; 时间复杂度为O&#xff08;N^2&#xff09; #include<iostream>using namespace std;int dp[100…

RK3568平台开发系列讲解(SPI篇)SPI数据的传输

🚀返回专栏总目录 文章目录 一、数据结构1.1、spi_transfer 结构体1.2、spi_message二、数据发送程序分析沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 参考资料: spi_transferspi_message一、数据结构 spi 数据传输主要使用了 spi_message 和 spi_transfer 结构…

二叉树的前序遍历(leetcode)

144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 这道题的启发性真的很强 &#xff0c;这里必须传入i的指针进去&#xff0c;下一次栈帧i&#xff0c;但回到了上一层i又变回到了原来的i&#…

docker network ls(用于列出 Docker 主机上的所有网络)

docker network ls 是一个 Docker 命令&#xff0c;用于列出 Docker 主机上的所有网络。Docker 允许你创建自定义的网络&#xff0c;以便更好地控制容器之间的通信。 当你运行 docker network ls 命令时&#xff0c;你可能会看到如下类似的输出&#xff08;输出可能会根据你的…

每日一题12:Pandas:数据重塑-融合

一、每日一题 解答&#xff1a; import pandas as pddef meltTable(report: pd.DataFrame) -> pd.DataFrame:reshaped_report report.melt(id_varsproduct, var_namequarter, value_namesales)return reshaped_report 题源&#xff1a;Leetcode 二、总结 melt()函数是Pa…

Nginx生产环境最佳实践之配置灰度环境

你好呀&#xff0c;我是赵兴晨&#xff0c;文科程序员。 下面的内容可以说是干货满满建议先收藏再慢慢细品。 今天&#xff0c;我想与大家深入探讨一个我们日常工作中不可或缺的话题——灰度环境。你是否在工作中使用过灰度环境&#xff1f;如果是&#xff0c;你的使用体验如…

AI图像生成-基本步骤

模型板块 1、新建采样器&#xff1a;新建节点-》采样器-》K采样器 2、拖动模型节点后放开&#xff0c;选择checkpoint加载器&#xff08;简易&#xff09;&#xff0c;模型新建成功 提示词板块 1、拖动正面条件节点后放开&#xff0c;选择CLIP文本编码器&#xff0c;模型新建…

mysql 一次删除多个备份表

show tables时&#xff0c;发现备份的表有点多&#xff0c;想要一个sql就删除 总不能drop table xx ; 写多次吧。 方式一 1.生成删除某个数据库下所有的表SQL -- 查询构建批量删除表语句&#xff08;根据数据库名称&#xff09; select concat(drop table , TABLE_NAME, ;)…

代码随想录算法训练营第39天|● 62.不同路径 ● 63. 不同路径 II

62. 不同路径 递归栈很酷 但超时 class Solution:def uniquePaths(self, m: int, n: int) -> int:if m1 or n1:return 1return self.uniquePaths(m-1,n)self.uniquePaths(m,n-1) 逐行dp class Solution:def uniquePaths(self, m: int, n: int) -> int:dp[1]*nfor j in…

FSMC的NOR Flash/PSRAM 控制器功能介绍(STM32F4)

目录 概述 1 FSMC支持的类型 1.1 信号类型概述 1.2 FSMC的应用 2 外部存储器接口信号 2.1 I/O NOR Flash 2.2 PSRAM/SRAM 3 支持的存储器和事务 4 通用时序规则 5 NOR Flash/PSRAM 控制器异步事务 5.1 模式 1 - SRAM/PSRAM (CRAM) 5.2 模式 A - SRAM/PSRAM (CRAM…

Golang | Leetcode Golang题解之第90题子集II

题目&#xff1a; 题解&#xff1a; func subsetsWithDup(nums []int) (ans [][]int) {sort.Ints(nums)n : len(nums) outer:for mask : 0; mask < 1<<n; mask {t : []int{}for i, v : range nums {if mask>>i&1 > 0 {if i > 0 && mask>&…

[HUBUCTF 2022 新生赛]ezsql

测试无结果 扫描目录&#xff0c;得到源码 找到注入点 思路&#xff1a;更新资料的时候可以同时更新所有密码 我们需要知道密码的字段名 爆库 nicknameasdf&age111,description(select database())#&descriptionaaa&token31ad6e5a2534a91ed634aca0b27c14a9 爆表…

运维别卷系列 - 云原生监控平台 之 08.prometheus grafana 实践

文章目录 [toc]部署 Grafana准备配置文件grafana.iniprovisioning/datasources/prometheus.yamlprovisioning/dashboards/dashboards.yamlprovisioning/dashboards/views 创建 svc创建 deployment Grafana 是一个图形化界面&#xff0c;配置 Prometheus 作为数据源&#xff0c;…

网络库-POCO介绍

1.简介 POCO C Libraries 提供一套 C 的类库用以开发基于网络的可移植的应用程序&#xff0c;它提供了许多模块&#xff0c;包括网络编程、文件系统访问、线程和并发、数据库访问、XML处理、配置管理、日志记录等功能。Poco库的设计目标是易于使用、高度可定制和可扩展。 包含…