【python】冒泡法--详细讲解(python实现)

news2024/12/27 13:33:53

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


【python】冒泡法详解(python实现)


目录

  • 【python】冒泡法详解(python实现)
  • 1. 原理说明
  • 2. 举例说明
  • 3. 代码实现


1. 原理说明

冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的列表,比较相邻的元素,并根据需要交换它们的位置,直到整个列表排序完成为止。冒泡排序的原理可以简单概括为以下步骤:

  1. 比较相邻元素:从列表的第一个元素开始,依次比较相邻的两个元素,比较的方式取决于排序的顺序(升序或降序)。

  2. 交换位置:如果相邻两个元素的顺序不符合排序要求,则交换它们的位置,将较大(或较小)的元素放在后面。

  3. 继续遍历:重复执行步骤 1 和步骤 2,直到遍历完整个列表。每一轮遍历都会将最大(或最小)的元素移动到列表的末尾。

  4. 缩小范围:在每一轮遍历后,列表的最后一个元素已经排好序,因此在下一轮遍历时可以减少一个元素的比较次数。

这个过程类似于气泡冒上水面的过程,每一次遍历都会让最大(或最小)的元素“冒泡”到合适的位置,因此得名“冒泡排序”。


2. 举例说明

给定列表 a = [9, 8, 10, 5, 7, 3, 5, 2, 6],我们使用冒泡排序进行升序排序:

第一轮遍历: 比较 [9, 8, 10, 5, 7, 3, 5, 2, 6]

9 > 8,交换位置得到  [8, 9, 10, 5, 7, 3, 5, 2, 6]
9 < 10,位置不变     [8, 9, 10, 5, 7, 3, 5, 2, 6]
10 > 5,交换位置得到 [8, 9, 5, 10, 7, 3, 5, 2, 6]
10 > 7,交换位置得到 [8, 9, 5, 7, 10, 3, 5, 2, 6]
10 > 3,交换位置得到 [8, 9, 5, 7, 3, 10, 5, 2, 6]
10 > 5,交换位置得到 [8, 9, 5, 7, 3, 5, 10, 2, 6]
10 > 2,交换位置得到 [8, 9, 5, 7, 3, 5, 2, 10, 6]
10 > 6,交换位置得到 [8, 9, 5, 7, 3, 5, 2, 6, 10]

第一轮遍历结束后,最大的元素 10 已经“冒泡”到了最后的位置。

第二轮遍历:比较 [8, 9, 5, 7, 3, 5, 2, 6, 10]

8 < 9,位置不变     [8, 9, 5, 7, 3, 5, 2, 6, 10]
9 > 5,交换位置得到 [8, 5, 9, 7, 3, 5, 2, 6, 10]
9 > 7,交换位置得到 [8, 5, 7, 9, 3, 5, 2, 6, 10]
9 > 3,交换位置得到 [8, 5, 7, 3, 9, 5, 2, 6, 10]
9 > 5,交换位置得到 [8, 5, 7, 3, 5, 9, 2, 6, 10]
9 > 2,交换位置得到 [8, 5, 7, 3, 5, 2, 9, 6, 10]
9 > 6,交换位置得到 [8, 5, 7, 3, 5, 2, 6, 9, 10]

第二轮遍历结束后,第二大的元素 9 也“冒泡”到了倒数第二个位置。

第三轮遍历:比较 [8, 5, 7, 3, 5, 2, 6, 9, 10]

8 > 5,交换位置得到 [5, 8, 7, 3, 5, 2, 6, 9, 10]
8 > 7,交换位置得到 [5, 7, 8, 3, 5, 2, 6, 9, 10]
8 > 3,交换位置得到 [5, 7, 3, 8, 5, 2, 6, 9, 10]
8 > 5,交换位置得到 [5, 7, 3, 5, 8, 2, 6, 9, 10]
8 > 2,交换位置得到 [5, 7, 3, 5, 2, 8, 6, 9, 10]
8 > 6,交换位置得到 [5, 7, 3, 5, 2, 6, 8, 9, 10]

第三轮遍历结束后,第三大的元素 8 也“冒泡”到了倒数第三个位置。

依次类推,经过多轮遍历,列表中的元素逐渐排好序,直到整个列表排序完成。

注意:冒泡排序是一种简单但效率较低的排序算法,特别是在处理大量数据时,它的时间复杂度为 O(n^2)。其他更高效的排序算法如快速排序和归并排序通常更受青睐。


3. 代码实现

代码如下(示例):


a = [9, 8, 10, 5, 7, 3, 5, 2, 6]
def arr_sorted(a):
    n = len(a)
    for i in range(n):
        for j in range(n-1-i):
            if a[j] > a[j+1]:
                a[j], a[j + 1] = a[j+1], a[j]
    return a
print(arr_sorted(a))

运行结果:

[9, 8, 10, 5, 7, 3, 5, 2, 6]

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

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

相关文章

简单工厂模式(Simple Factory)

简单工厂模式&#xff0c;又称为静态工厂方法(Static Factory Method)模式。在简单工厂模式中&#xff0c;可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例&#xff0c;被创建的实例通常都具有共同的父类。简单工厂模式不属于GoF的23个…

iPhone 7透明屏的显示效果怎么样?

iPhone 7是苹果公司于2016年推出的一款智能手机&#xff0c;它采用了4.7英寸的Retina HD显示屏&#xff0c;分辨率为1334x750像素。 虽然iPhone 7的屏幕并不是透明的&#xff0c;但是苹果公司在设计上采用了一些技术&#xff0c;使得用户在使用iPhone 7时可以有一种透明的感觉…

虚拟个家用服务器集群(3):更换 PVE 软件源

风无痕 July 31,2023 前言 很多人想建个人博客类的网站&#xff0c;这就需要网站服务器&#xff1b;需要管理手机、电脑中积累的照片&#xff0c;每张照片可都是人生一个片段的记录&#xff0c;需要管理微信中收发的各种文档等等&#xff0c;这就需要一台 NAS 即 Network Att…

教师工作量管理系统Springmvc+Spring+Mybatis课程工作量教室java源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 教师工作量管理系统SpringmvcSpringMybatis 系统有1权…

800V电驱动产品和技术汇总

文章来源&#xff1a; 赵老师——国汽战略院 汽车电动化研究中心 副主任研究员 需要样件请联&#xff1a;shbinzer 拆车邦 德国采埃孚 采埃孚于2022年量产800V电驱系统&#xff0c;采埃孚电驱传动技术事业部亚太区研发副总裁王岳在《采埃孚新一代超紧凑电驱动系统》报告中展…

【入门SpringCloud(一)】什么是SpringCloud?

一、概述 集群&#xff08;Cluster&#xff09;&#xff1a;同一种软件服务的多个服务节点共同为系统提供服务过程&#xff0c;称之为该软件服务集群。 分布式&#xff08;Distribute&#xff09;&#xff1a;分布式是一种系统架构&#xff0c;是将系统中的不同组件分布在不同…

计算机网络期末复习简答题、综合题、实验题答案整理汇总详细(持续更新中)

文章目录 简答题一、第一章&#xff1a;计算机网络概述1. TCP/IP 与 OSI 相结合的五层体系结构将计算机网络划分成哪几个层次&#xff1f;各层的主要功能是什么 二、第二章&#xff1a;物理层1. 交换机、路由器、网卡、网桥、集线器、中继器分别工作在哪一层2. 简述交换机、集线…

10.类型声明文件

类型声明文件的作用是 为已存在的JS库提供类型信息 目录 1 axios中的类型声明文件 2 类型声明文件与普通ts文件的区别 3 vscode中内置的类型声明文件 4 第三方库内置的类型声明文件 5 DefinitelyTyped 提供类型声明文件 6 自定义类型声明文件 6.1 创建给ts用的类…

同为科技(TOWE)带热插拔功能机柜PDU插座的应用

所谓热插拔&#xff08;hot-plugging或Hot Swap&#xff09;&#xff0c;即带电插拔&#xff0c;指的是在不关闭系统电源的情况下&#xff0c;将模块、板卡插入或拔出系统而不影响系统的正常工作&#xff0c;从而提高了系统的可靠性、快速维修性、冗余性和对灾难的及时恢复能力…

JMeter 的使用

文章目录 1. JMeter下载2. JMeter的使用2.1 JMeter中文设置2.2 JMeter的使用2.2.1 创建线程组2.2.2 HTTP请求2.2.3 监听器 1. JMeter下载 官网地址 https://jmeter.apache.org/download_jmeter.cgi https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.2.zip 下载解…

Vue2 第十二节 Vue组件化编程 (二)

1. VueComponent 2. 单文件组件 一. VueComponent 组件本质上是一个名为VueComponent的构造函数&#xff0c;不是程序员定义的&#xff0c;是Vue.extend生成的只需要写<school/>或者<school><school/>&#xff0c;Vue解析时&#xff0c;会帮我们创建schoo…

ThinkPHP 6 添加跳转提示扩展 liliuwei/thinkphp-jump

liliuwei/thinkphp-jump 是 TP5 中经典跳转提示&#xff0c;在 TP6 中已经取消&#xff0c;通过 composer 下载该扩展可以在 TP6 中使用 TP5 的跳转提示操作。 安装扩展 在应用根目录执行: composer require liliuwei/thinkphp-jump引入扩展 在全局配置目录生成 jump.php 文件…

Activity的生存期

以下内容摘自郭霖《第一行代码》第三版 Activity的生存期 Activity类中定义了7个回调方法&#xff0c;覆盖了Activity生命周期的每一个环节&#xff1a; onCreate()。这个方法你已经看到过很多次了&#xff0c;我们在每个Activity中都重写了这个方法&#xff0c;它会在Activit…

安科瑞电动机保护器产品在污水处理厂的应用-安科瑞黄安南

应用场景 功能 1&#xff09;排污泵经常会出现过载、缺相等问题&#xff0c;导致电机烧坏&#xff1b; 2&#xff09;为电动机提供完善的保护&#xff0c;并具备多种事件记录追忆功能&#xff1b; 3&#xff09;全电参量测量&#xff0c;包括但不限于三相电流、三相电压、有…

11-矩阵(matrix)_方阵_对称阵_单位阵_对角阵

矩阵及其运算 [ a 11 ⋯ a 1 n ⋯ ⋯ ⋯ a m 1 ⋯ a m n ] \begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \cdots & \cdots & \cdots \\ a_{m1} & \cdots & a_{mn} \\ \end{bmatrix} ​a11​⋯am1​​⋯⋯⋯​a1n​⋯amn​​ ​ 矩阵就是二维数组&…

模板(下)

文章目录 非类型模板参数 模板的特化 模板分离编译 一、非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff1a;就是用一个常量作为类(函数)模板的…

【笔试强训选择题】Day33.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&#xff…

记一次 HTTPS 抓包分析和 SNI 的思考

日常听说 HTTPS 是加密协议&#xff0c;那现实中的 HTTPS 流量&#xff0c;是真的完全加密吗&#xff1f; ——答案是&#xff0c;不一定。原因嘛&#xff0c;抓个包就知道了。 我们用 curl 命令触发一下&#xff1a; curl -v https://s-api.37.com.cn/api/xxx * Trying 1…

【雕爷学编程】MicroPython动手做(27)——物联网之掌控板小程序2

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

退退退!台风“卡努”或转向!打开华为天气查看台风实时路径

近期台风频繁&#xff0c;刚送走了“杜苏芮”&#xff0c;又或将迎来第六号超强台风“卡努”。面对来势汹汹的台风&#xff0c;通勤和外出变得困难重重。为了有效抵御台风肆虐&#xff0c;大家需要做好应对措施&#xff0c;保障人身安全。 如果处于台风登陆的影响范围内&#…