问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求教Python题

发布网友 发布时间:2022-04-29 13:21

我来回答

1个回答

热心网友 时间:2022-04-18 09:23

基本原理

从序列头部开始遍历,两两比较,如果前者比后者大,则交换位置,直到最后将最大的数(本次排序最大的数)交换到无序序列的尾部,从而成为有序序列的一部分;
下次遍历时,此前每次遍历后的最大数不再参与排序;
多次重复此操作,直到序列排序完成。
由于在排序的过程中总是小数往前放,大数往后放,类似于气泡逐渐向上漂浮,所以称作冒泡排序。


原理图解

Tips:蓝色代表在一轮排序中等待交换,黑色代表在该轮排序中已交换完成,红色代表已排序完成

实现冒泡的步骤分解

使用for循环确定排序次数

由于待排序的序列只剩下一个数时已经能够确定顺序,则无需进行排序,因此,排序次数为序列长度 – 1。

每次排序的比较次数控制

每次排序,序列中的多个数字要分别进行两两比较,多次的比较需要利用for语句来进行实现。该for循环嵌套于排序次数的for循环当中(形成双for的嵌套)。

Tips:j 需要设置为小于 len - i - 1,减i的原因是已经排序完成的数不再参与比较,减1的原因是数组下标索引值从0开始。

核心功能 — 两两比较并根据情况交换位置

比较两数大小,如果前者比后者大,则进行数值的交换,也就是交换位置。

冒泡排序法完整代码

冒泡排序法的优化

假如序列的数据为:[0, 1, 2, 3, 4, 5];
使用上面的冒泡排序法进行排序,得到的结果肯定没有问题,但是,待排序的序列是有序的,理论上是无需遍历排序。
当前的算法不管初始的序列是否有序,都会进行遍历排序,效率会比较低,因此需要优化当前的排序算法。
在如下的算法中,引入一个swap变量,每一次排序之前初始化为false;若发生两数交换位置,则将其设置为true。
在每次排序结束时候判断swap是否为false,如果是,则说明序列已排序完成或者序列本身是有序序列,就不再进行下一次排序。
通过此方法,减少不必要的比较和位置交换,进一步提高算法的性能

冒泡排序法的效率

时间复杂度

最佳状态:待排序的序列本身是有序序列,排序次数根据优化后的代码,可以得出是n-1次,时间复杂度为O(n);
最坏的情况:待排序的序列是逆序的,此时需要排序1 + 2 +3 ……(n - 1) = n(n – 1 )/2次,
时间复杂度为O(n^2)。

空间复杂度

冒泡排序法需要一个额外空间(temp变量)来交换元素的位置,所以空间复杂度为O(1)。

算法的稳定性

当相邻元素相等时,并不需要交换位置,也就不会出现相同元素的前后顺序发生改变,所以,是稳定性排序。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人类如何才能悬浮在空中? - 知乎 人体悬浮术是真的存在吗 人体怎样才能真正的在空中悬浮 小孩c蛋白反应高是什么原因 (2014?南海区二模)如图所示,物重G为2000N,小红用800N的拉力花2s的时间... 苹果13系列升级iOS15.5好吗? 出生2o12年11月20日2点姓石光字辈取名 求龙凤胎名字:2012年6月21日(农历5月初3)凌晨0点40分出生,大的为龙,小... by和take有什么区别 takeby后面跟交通工具的区别 冒泡排序法怎样用伪代码表示 求冒泡排序的全中文的伪代码 ? 我的是全自动洗衣机,洗衣正常,脱水没力,转速不快,是什么原因?请教哪位高手帮忙看看什么原因?谢谢! 洗衣机洗涤时转速变慢是什么原因?如何维修?? 拼多多的平台号码多少 水磨石地面多少钱一平方 罗平县附近有水磨石白石子卖吗? 水磨石地面的材料 水磨石价格 pvc地板武汉批发市场在那 水磨石字要好几个,怎么卖呢? 水磨石地面的价格? 天津市大理石厂怎么样? 水磨石包工价是多少钱一平方? 水磨石池子哪里的便宜 以前水磨石挺便宜的,为什么现在的水磨石价格这么高? 哪里有水磨石石子批发 水磨石材料 天津水磨石厂家? 天津哪里有石雕石材曲阳石雕批发市场 求冒泡排序的伪代码,要简单一点能看懂的,不要太魔性 冒泡排序的算法。 用伪代码写出使用子算法的冒泡排序算法,子算法是在未排序子表中做冒泡... 作业上的一些问题, 关于计算机编程的冒泡排序有一些不太明白 冒泡排序:输入n个字符串,对其进行冒泡排序,使其按从小到大顺序输出... 怎么用C语言伪代码来解释一维数组的冒泡排序 C语言简单冒泡法程序 第一题是 用冒泡排序算法排序 可写程序 可写算法 2.用折半查找法 找... ...使该表仍然有序。试编写该算法。 2。编写冒泡排序的算法。 用自然语言,程序流程图,伪代码分别描述冒泡排序,选择排序和插入排序,并... 创建一数组numArr 长度为n 使用冒泡排序。插入排序 活着选择排序将数组... 用自然语言/程序流程图/伪码表示一种排序算法。(冒泡排序/插入排序) 严蔚敏那本《数据结构》书上的伪代码要怎么在vc环境中运行?急!很急!非常急!十万火急! 我的技能全靠偷有女主吗 我偷学的技能操作方式与我原本的技能相同,要使用偷学技能怎么办啊 lol五黑名称:杀人全靠吼,走位全靠扭,……,后面三个怎么取 关于盗贼偷窃技能 我怎么才能学偷窃技能 元素可以偷学什么技能? DNF每种角色可以偷学什么技能?