当前位置: 首页 > news >正文

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行中的“>”改为“<”即可。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • LeetCode - 12 整数转罗马数字
  • 快速了解Git 文件的四种状态及其操作指令、如何忽略文件
  • 【随手记】excel中的text函数使用
  • 数学建模笔记
  • 【Go - 每日一小问,new出来的空间,是在堆还是栈上,用手动回收吗】
  • Python 潮流周刊#67:uv 的重磅更新(摘要)
  • 【业务场景实战】我等你10秒
  • [Leetcode 51][Hard]-n皇后问题-回溯
  • BeanFactory 和 FactoryBean 的区别
  • 基于yolov10的PCB检测算法研究
  • Leetcode Day18 堆
  • EventBus搭配LifeCycle可能更美味
  • 大模型笔记01--基于ollama和open-webui快速部署chatgpt
  • 51单片机-定时器介绍
  • 模型 冯/诺依曼思维模型
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Docker下部署自己的LNMP工作环境
  • gcc介绍及安装
  • java2019面试题北京
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Vue全家桶实现一个Web App
  • Web设计流程优化:网页效果图设计新思路
  • 编写高质量JavaScript代码之并发
  • 仿天猫超市收藏抛物线动画工具库
  • 关于 Cirru Editor 存储格式
  • 聊聊sentinel的DegradeSlot
  • 批量截取pdf文件
  • 实现菜单下拉伸展折叠效果demo
  • 思否第一天
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 小试R空间处理新库sf
  • 协程
  • 异步
  • 栈实现走出迷宫(C++)
  • # linux 中使用 visudo 命令,怎么保存退出?
  • # 透过事物看本质的能力怎么培养?
  • ## 基础知识
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #Spring-boot高级
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (02)Unity使用在线AI大模型(调用Python)
  • (11)MSP430F5529 定时器B
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (C语言)二分查找 超详细
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (Java数据结构)ArrayList
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (四)opengl函数加载和错误处理
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表