python 冒泡排序算法(超级详细)

python冒泡算法三种方式 python的三种冒泡算法 阅读详情
AI摘要

本文介绍了冒泡排序的基本概念,通过示例详细展示了排序过程,并提供了Python实现代码。同时,还分析了冒泡排序的时间复杂度和空间复杂度。

一、什么是冒泡排序

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

一般情况下,称某个排序算法稳定,指的是当待排序序列中有相同的元素时,它们的相应位置在排序后不会发生改变。

二、示例

假设待排序序列为 (5,1,4,2,8),如果采用冒泡排序对其进行升序(由小到大)排序,则整个排序过程如下所示:

  1. 第一轮排序,此时整个序列中的元素都位于待排序序列,依次扫描每对相邻的元素,并对顺序不正确的元素对交换位置,整个过程如图 1 所示。
    在这里插入图片描述
    从图 1 可以看到,经过第一轮冒泡排序,从待排序序列中找出了最大数 8,并将其放到了待排序序列的尾部,并入已排序序列中。

  2. 第二轮排序,此时待排序序列只包含前 4 个元素,依次扫描每对相邻元素,对顺序不正确的元素对交换位置,整个过程如图 2 所示。
    在这里插入图片描述
    可以看到,经过第二轮冒泡排序,从待排序序列中找出了最大数 5,并将其放到了待排序序列的尾部,并入已排序序列中。

  3. 第三轮排序,此时待排序序列包含前 3 个元素,依次扫描每对相邻元素,对顺序不正确的元素对交换位置,整个过程如图 3 所示。
    在这里插入图片描述
    经过本轮冒泡排序,从待排序序列中找出了最大数 4,并将其放到了待排序序列的尾部,并入已排序序列中。

  4. 第四轮排序,此时待排序序列包含前 2 个元素,对其进行冒泡排序的整个过程如图 4 所示。
    在这里插入图片描述
    经过本轮冒泡排序,从待排序序列中找出了最大数 2,并将其放到了待排序序列的尾部,并入已排序序列中。

  5. 当进行第五轮冒泡排序时,由于待排序序列中仅剩 1 个元素,无论再进行相邻元素的比较,因此直接将其并入已排序序列中,此时的序列就认定为已排序好的序列(如图 5 所示)。
    在这里插入图片描述

三、冒泡排序的实现代码(python)

def mao_pao(num_list):
    num_len = len(num_list)
    # 控制循环的次数
    for j in range(num_len):
    	# 添加标记位 用于优化(如果没有交换表示有序,结束循环)
    	sign = False 
        # 内循环每次将最大值放在最右边
        for i in range(num_len - 1 - j):
            if a[i] > a[i+1]:
                a[i], a[i+1] = a[i+1], a[i]
				sign = True
			
		# 如果没有交换说明列表已经有序,结束循环
		if not sign:
			break
if __name__ == '__main__':
    a = [1, 3, 4, 2, 6, 9, 12, 3, 22]
    mao_pao(a)
    print(a)

四、时间复杂度和空间复杂度

  • 我们按两种情况来分:
  1. 如果我们的顺序是正序,即最理想的一种情况,只需走一遍即可完成排序,所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。
  2. 如果很不幸我们的数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:(等差数列求和)

在这里插入图片描述
时间复杂度:

  • 冒泡排序的最好时间复杂度为:O(n),示例[1,2,3,4,5]
  • 最差的时间复杂度为: O(n2)示例: [5,4,3,2,1]

平均时间复杂度分析:

一、 前置知识: 逆序度、有序度

对于一个倒叙排列的数组: 例如[6, 5, 4, 3, 2, 1]有序度是0,逆序度是n*(n-1)/2
对于一个完全有序的数组: 例如[1, 2, 3, 4, 5, 6]有序度是n*(n-1)/2, 逆序度是0
我们把这种完全有序的数组叫做满有序度(也就是n*(n-1)/2)
满序度、有序度、逆序度之间有一定的关系: 逆序度 = 满有序度 - 有序度
有序度和逆序度的取值范围: 0 ~ n*(n-1)/2

二、冒泡排序过程:

冒泡排序过程包含两个操作,比较和交换,因为冒泡排序只会交换相邻的两个元素,所以,每进行一次交换,有序度就增加一。所以,冒泡排序的执行过程中,总的交换次数是确定的,即为逆序度。
在这里插入图片描述
因为不清楚原数据的复杂度
我们代码执行的最大次数由上图红色区域:
假设: 上图代码的平均比较次数为k1,平均交换次数为k2
平均交换次数: k1 = n*(n-1)/4
平均比较次数: k2<n**2 && k2>k1= n*(n-1)/4

冒泡排序算法平均时间复杂度是O(k1+k2),化简得O(n2)

空间复杂度为:
因为没有额外的申请大的空间,空间复杂度为O(1)

数据结构与算法 ---- 冒泡排序算法 冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序。 假设待排序序列为 (5,1,4,2,8),如果采用冒泡排序对其进行升序(由小到大)排序,则整个排序过程如下所示: 第一轮排序,此时整个序列中的元素都位于待排序序列,依次扫描每对相邻的元素,并对顺序不正确的元素对交换位置,整个过程如图 1 所示。 从图 1 可以看到,经过第一轮冒泡排序,从. 阅读详情

相关推荐

冒泡排序详解(附有Java详细代码)

冒泡排序是一种简单直观的排序算法,它通过相邻元素之间的比较和交换来实现排序。虽然它在效率上不如其他排序算法,但在某些特定场景下仍然有其应用价值。在实际应用中,我们应该根据具体需求和数据特点选择合适的排序算法。同时,我们也可以通过一些优化策略来提高冒泡排序的效率,如标记交换和鸡尾酒排序等。

Weirdo的博客 1万+

Python冒泡排序算法

Num01–>冒泡排序定义 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

IT晓可程序员之路 2万+

图文详解Python冒泡排序算法

本篇文章给大家介绍了关于冒泡排序的相关问题,包括了算法描述、分析、代码实现等等内容,下面一起来看一下,希望对大家有帮助。

weixin_68789096的博客 1201

基本算法——冒泡排序(Python版)

基本算法——冒泡排序(Python版)

Limerence的博客 1万+

Python算法篇:冒泡排序

Python算法篇:冒泡排序 今天自习了一个算法,冒泡排序法,其实还挺简单的,就讲下原理及代码运行的方式。 首先我们要了解冒泡排序法是什么,这个是最基础的算法之一,在许多编程语言中都适用。它会把列表中的数字依次两两对比,将大的数字排到最后。而每次排列完数字后,最后一位的数字不会再重复计算,将接着排列剩下的数字,直至列表中的数字从小到大排列完成为止。 下面是程序代码 numbers = [12,60,35,77,24,66] length = len(numbers) for j in range(le

weixin_56320616的博客 2253

python实现排序算法——冒泡排序

       使用python实现冒泡排序算法,冒泡排序法是非常经典并且非常简单有效的排序算法。首先我们介绍一下冒泡排序算法。 算法步骤: Step 1: 比较第一个数和第二个数,如果第一个数比第二个数大,那么就调换两个数的位置。 Step 2: 按照step 1中的做法,依次比较序列中所有相邻的两个数。此时,序列中最大的数已经“沉”到了最后面。 Step...

海军上将光之翼的博客 1268

用python实现一些基本算法

感悟:重点不在于代码[通过各种方法最终都能搓出来],而在于思想[多看多了解]。 一、冒泡算法 [bubble_sort] def bubble_sort(L): len_for_L = len(L) for i in range(len_for_L-1): flag = 0 for j in range(len_for_L-1-i): ...

qq_32446743的博客 2559

python实现冒泡排序算法

前面我们深刻的讲解了冒泡排序算法,这篇文章我们来实战一下 代码如下(python版) #!/usr/bin/python # -*- coding: utf-8 -*- #冒泡排序 def bubble_sort(the_list): i = 0 while i &lt; len(the_list): j = 0 while j &lt; l...

美丽的泡沫 8476

轻松掌握冒泡排序:Python冒泡排序算法

冒泡排序是一种基本的排序算法,它通过反复交换相邻两个元素的位置,使得每一轮循环都能将未排序部分中的最大元素移动到数组的末尾。因为排序过程中较小的元素像气泡一样逐渐浮到数组的顶部,故称为冒泡排序。

2201_75362610的博客 9868

Python中的关键算法之“冒泡排序”

冒泡排序是一种较简单的排序算法,它会遍历若干次要排序的数列,每次遍历时,都会从前往后依次比较相邻两个数的大小,如果前者比后者大,则交换它们的位置。除了最后一个数外,采用相同的方法对其他数再次遍历时,第二大的数就被排列在最大的数之前。当前一个数大于后一个数,则交换两个数的位置,输出排序后的序列,代码如下所示。Step1:先输入需要排序的数组,使用len( )函数获得序列的长度,输出排序前的序列,代码如下所示。运行程序得到的结果如下图所示。本实战技能重点在于冒泡排序,要实现本案例,需要掌握冒泡排序的基本原理。

2201_75362610的博客 948

HUMAnN 3.0 (alpha)安装及使用

文章目录简介安装数据库下载运行参考 简介 安装 conda install humann humann_test (~1 minute) 数据库下载 humann_databases --download chocophlan full /path/to/databases --update-config yes humann_databases --download uniref uniref90_diamond /path/to/databases --update-config yes humann_

dys的博客 9505

Python排序算法之冒泡排序

冒泡排序是一种简单直观的排序算法;它重复的遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复的进行直到不再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经过交换慢慢“浮”到数列的顶端。比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。

程序员小芽的博客 8659

【Codesys】获取从站信息,判断是否从站断联,总线丢失

获取EtherCAT从站信息,判断是否从站断联,总线丢失

qq_35316470的博客 5732

100个python算法超详细讲解:冒泡排序

1.问题描述 对N个整数(数据由键盘输入)进行升序排列。 2.问题分析 对于N个类型相同的数,我们可利用数组进行存储。冒泡排序是利 用两个相邻元素之间进行比较交换的过程将一个无序表变成有序表。 冒泡排序的思想是:首先,从表头开始往后扫描数组,在扫描过 程中逐对比较相邻两个元素的大小。若相邻两个元素中,前面的元素 大于后面的元素,则将它们互换,称之为消去了一个逆序。在扫描过 程中,不断地将两相邻元素中的大者往后移动,最后就将数组中的最 大者换到了表的最后,这正是数组中最大元素应有的位置。然后,在 剩下的数组元

Lee达森的博客 1498

保姆级教程:手把手教你为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)

本文提供了一份详细的教程,指导开发者如何为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)。从理解下载算法的核心机制到实现FlashPrg.c的核心操作,再到链接脚本与地址映射实战,手把手教你完成定制化SPI Flash下载算法的开发与优化。

weixin_28716769的博客 408

芯片Tapeout前GDS Review | Calibre中如何切出gds中指定区域版图?

芯片Tapeout GDS Review 之Calibre中如何切出指定区域版图GDS

weixin_37584728的博客 1787

python实现冒泡排序完整算法_利用python实现冒泡排序算法实例代码

利用python实现冒泡排序算法实例代码冒泡排序冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:1、比较相邻的元素。如果第一个比第二个大(升...

weixin_39610759的博客 1290

《大数据: Hive 交互命令和常用配置》

一、Hive 交互命令 1. 首先解决一个可能发生的问题 (log4 jar包冲突) 我这里解决方法就是删除一个,我删的是hive下的包 yexiang@hadoop1:<hive>$ hive SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/soft/apache-hive-2.3.7-bin/lib/log4j-slf4j-impl-2.6.2.ja.

yexiang优快云的专栏 288

Python 实现冒泡排序算法

冒泡排序(bubble sort): 原理: 重复的遍历要排序的数列, 一次比较两个元素, 如不满足我们指定的条件, 就交换两个元素的位置, 直至遍历完成, 这个算法名字的由来是因为越小的元素会慢慢 '浮' 到数列的顶端 冒泡排序算法如下: 对每一对相邻元素做相同的工作, 到最后, 最后的元素就是最大的 针对所有的元素重复以上步骤, 除了最后一个 持续每...

Nick.Peng's Blogs 1806

问答式AI vs 智能体(Agent):它们有什么不同?

你肯定用过 ChatGPT 或文心一言——问它一个问题,它给你一个答案。AI Agent(AI智能体)。很多人搞不清楚:它们不都是"AI"吗?有什么区别?这篇文章用一个最简单的类比,彻底讲清楚这两者的本质差异。框架特点适合人群AutoGPT完全自主执行任务,链式思考开发者MetaGPT模拟团队协作,多角色分工开发者LangChain最流行的Agent开发框架开发者Dify可视化无代码搭建Agent非技术用户Coze(扣子)字节跳动出品,国内最易用普通用户WorkBuddy。

Johnny2004的专栏 447

改进后的yolov8导出进行部署到rk3588上时,导出为onnx格式报错aten::fft_fft2算子不支持导出...如何解决?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 1798

python冒泡排序原理_详解python算法之冒泡排序

python之冒泡排序概念: 重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。算法原理冒泡排序算...

weixin_39790510的博客 477

【人工智能】拒绝焦虑,理性突围:AI 时代 Java 工程师的职业重构与进化指南

摘要:在AI技术快速发展的背景下,Java工程师面临职业转型挑战。本文通过MECE原则解构工作内容,划分高替代风险区(如CRUD开发)、高增效潜能区(如逻辑优化)和高核心壁垒区(如架构设计),指出AI对不同任务的影响程度。从劳动经济学视角分析行业将呈现K型分化,初级执行者被替代,而精通AI协作的全栈工程师需求增长。文章强调警惕过度依赖AI导致认知能力退化,并提出转型路径:掌握AI驱动开发(AIDD)、深耕领域驱动设计(DDD)、拓展全流程能力及AI原生应用开发。最终结论指出,未来的核心竞争力在于结合AI工具

奶爸的编程之路,也就一周冷个三天 135

Python常用算法之冒泡排序

冒泡排序 分析: 冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 算法稳定性: 冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两...

weixin_45144837的博客 616

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

python算法之冒泡排序

目录 python之冒泡排序 算法原理 算法分析 代码实现 总结 python之冒泡排序 概念: 重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元...

anmi0781的博客 284

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: python 数值的整数次方
下一篇: python 递归乘法
评论 20
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶知秋的BLOG

创作不易 请多多关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值