Python中排序算法之插入排序

1 插入排序算法原理

插入排序算法与《Python中排序算法之选择排序》中提到的选择排序算法类似,也是将要排序的数列分为两个子数列(红色框数列和绿色框数列),不同之处在于插入排序算法从绿色框子数列中逐个选择数字,之后按照升序或者降序插入到红色框子数列中。而选择排序是在绿色框子数列中选择最小或最大数字,之后将该数字放到红色框子序列的尾部。

插入排序算法很像现实中玩扑克牌时,一边抓牌(绿色框子数列),一边理牌(红色框子数列)的过程,抓一张牌就把它插入到应有的位置。

2 插入排序的手动实现

假设要排序的数列中的数字是“3,8,5,9,6”。首先,从绿色框子数列中逐个选择数字,第一个数字是“3”,将其放入到红色框中,如图1所示。

图1 第一次排序

接下来,选择绿色框中子数列的数字“8”,按照升序(从小到大)将其插入到红色框中的子数列中,如图2所示。

图2 第二次排序

然后,选择绿色框中子数列的数字“5”,按照升序(从小到大)将其插入到红色框中的子数列中,如图3所示。

图3 第三次排序

按照相同的方法,依次选择绿色框中子数列的数字“5”和“6”,按照升序(从小到大)将其插入到红色框中的子数列中,如图4所示。

图4 剩余的排序

注意1 使用插入排序算法对n个数字进行排序时,需要排n-1次。

3 插入排序的代码实现

通过图5所示的代码,实现插入升序(从小到大)的排序算法。

图5 插入排序的代码实现

其中,第1行为要排序的数列;第2行的for循环表示排序的次数;第3行中的key表示从绿色框子序列中逐个取出的数;第3行j表示取出的数字要插入到红色框子序列的位置;第5-8行代码通过while循环,找到要插入的红色框子序列的位置,并把key插入到j表示的位置处,完成插入排序。程序运行的效果如图6所示。

图6 程序运行效果

相关链接1 使用插入排序算法进行降序(从大到小)的代码,只需将图5第5行中的“>”改为“<”即可。

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

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

相关文章

单片机内存区域划分

目录 一、C 语言内存分区1、栈区2、堆区3、全局区&#xff08;静态区&#xff09;4、常量区5、代码区6、总结 二、单片机存储分配1、存储器1.1 RAM1.2 ROM1.3 Flash Memory1.4 不同数据的存放位置 2、程序占用内存大小 一、C 语言内存分区 C 语言在内存中一共分为如下几个区域…

【生日视频制作】农村大马路绿色墙体广告标语喷漆AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程农村大马路墙体广告标语喷漆AE模板改文字素材 怎么如何做的【生日视频制作】农村大马路绿色墙体广告标语喷漆AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件 下载AE模板 把AE模板导入AE软件 修改图片或文字 渲染出…

【最新消息】211高校,拟撤销测绘工程专业

近日&#xff0c;中国石油大学&#xff08;北京&#xff09;教务处发布《关于公示2024年度拟撤销本科专业的通知》&#xff0c;拟撤销音乐学、建筑学、测绘工程等9个本科专业。 通知内容如下&#xff1a; 根据《教育部高等教育司关于开展2024年度普通高等学校本科专业设置工作的…

【STM32】IIC

超级常见的外设通信方式&#xff0c;一般叫做I方C。 大部分图片来源&#xff1a;正点原子HAL库课程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目录 1 基本概念 1.1 总线结构 1.2 IIC协议 1.3 软件模拟IIC逻辑 2 AT24C02 2.1 设备地址与…

一次VUE3 使用axios调用萤石云OpenAPI踩坑经历

通过调用萤石云的获取设备列表功能&#xff0c;我们可以根据 ACCESS_TOKEN 获取该用户下的设备列表。 Python 调用接口 根据接口文档[1]&#xff0c;使用Python&#xff0c;很轻松就能获取到该列表&#xff0c;代码如下&#xff08;该代码用于拼接生成vue代码&#xff0c;这是…

Codeforces Round 969 (Div. 2) 题ABC详细题解,包含(C++,Python语言描述)

前言&#xff1a; 首先让我们恭喜tourist创造历史 他是第一&#xff0c;他又是第一&#xff0c;他总是第一&#xff0c;第一个codefores上4000分的&#xff0c;创造一个新的段位:Tourist&#xff0c;他的名字就是一个新的段位&#xff0c;他就是最高的山&#xff0c;最长的河 本…

访问win10共享文件夹:用户或密码不正确 以及 未授予用户在此计算机上的请求登录类型

因为安装的是神州网信政府版&#xff0c;该版本通常包含更严格的安全策略和访问控制&#xff0c;设置了共享文件夹后&#xff0c;访问共享文件夹时出现错误。 1、首先报错&#xff1a;用户或密码不正确 将》网络访问&#xff1a;本地账户的共享和安全模型&#xff0c;修改为&a…

开源通用验证码识别OCR —— DdddOcr 源码赏析(二)

文章目录 前言DdddOcr分类识别调用识别功能classification 函数源码classification 函数源码解读1. 分类功能不支持目标检测2. 转换为Image对象3. 根据模型配置调整图片尺寸和色彩模式4. 图像数据转换为浮点数据并归一化5. 图像数据预处理6. 运行模型&#xff0c;返回预测结果 …

Python测试之测试覆盖率统计

本篇承接上一篇 Python测试框架之—— pytest介绍与示例&#xff0c;在此基础上介绍如何基于pytest进行测试的覆盖率统计。 要在使用 pytest 进行测试时检测代码覆盖率&#xff0c;可以使用 pytest-cov 插件。这个插件是基于 coverage.py&#xff0c;它能帮助你了解哪些代码部…

人工智能和机器学习5 (复旦大学计算机科学与技术实践工作站)语言模型相关的技术和应用、通过OpenAI库,调用千问大模型,并进行反复询问等功能加强

前言 在这个日新月异的AI时代&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术正以前所未有的速度改变着我们的生活方式和工作模式。作为这一领域的佼佼者&#xff0c;OpenAI不仅以其强大的GPT系列模型引领风骚&#xff0c;还通过其开放的API接口&#xff0c;让全球开…

哈工大-操作系统L30

文件使用磁盘的实现 fd文件描述符 buf内存缓冲区 count读写字符的个数 file->inode获得inode file_write写文件 inode映射表 读写的内存缓冲区buf,file字符流的位置200-212,根据inode提供的索引号找到块号,根据buf形成请求队列&#xff0c;再放入电梯队列 fseek调整读…

Jenkins安装使用详解,jenkins实现企业级CICD流程

文章目录 一、资料1、官方文档 二、环境准备1、安装jdk172、安装maven3、安装git4、安装gitlab5、准备我们的springboot项目6、安装jenkins7、安装docker8、安装k8s&#xff08;可选&#xff0c;部署节点&#xff09;9、安装Harbor10、准备带有jdk环境的基础镜像 三、jenkins实…

力扣1235.规划兼职工作

力扣1235.规划兼职工作 动态规划 二分 将所有工作按照结束时间排序f[i]表示前i个工作可获取的最大收益状态转移&#xff1a;取第i个工作&#xff0c;f[i] profit[i] f[j]&#xff0c;其中j为结束时间小于i的开始时间的最大数不取第i个工作&#xff0c;f[i] f[i-1]可以通过二…

低代码开发平台:重塑未来软件开发格局的关键力量

低代码开发平台正以前所未有的速度改变着软件开发的面貌&#xff0c;通过最小化手动编码&#xff0c;让用户能够迅速构建应用程序。随着企业对敏捷性和创新能力的追求日益增强&#xff0c;这类平台的需求激增。展望未来&#xff0c;技术进步与市场动态将引领低代码开发进入新的…

大阪OSAKA分子泵TG710MTG730TG1130TD7111TG2810TD3211TG3413手侧接线图

大阪OSAKA分子泵TG710MTG730TG1130TD7111TG2810TD3211TG3413手侧接线图

window下kafka3启动多个

准备工作 我们先安装好kafka&#xff0c;并保证启动成功&#xff0c;可参考文章Windows下安装Kafka3-CSDN博客 复制kafka安装文件 kafka3已经内置了zookeeper&#xff0c;所以直接复制就行了 修改zookeeper配置文件 这里我们修改zookeeper配置文件&#xff0c;主要是快照地址…

【MyBatis】MyBatis的一级缓存和二级缓存简介

目录 1、一级缓存 1.1 我们在一个 sqlSession 中&#xff0c;对 User 表根据id进行两次查询&#xff0c;查看他们发出sql语句的情况。 1.2 同样是对user表进行两次查询&#xff0c;只不过两次查询之间进行了一次update操作。 1.3 一级缓存查询过程 1.4 Mybatis与Spring整…

switch语句和while循环

switch语句和while循环 switch语句break的用法default的用法switch语句中的case和default的顺序问题 while语句while语句的执行流程while语句的具体例子 switch语句 switch 语句是⼀种特殊形式的 if…else 结构&#xff0c;用于判断条件有多个结果的情况。它把多重 的 else if…

滚动视图ScrollView

activity_scroll_view.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_pare…

【Python系列】 Python 中的枚举使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…