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

python算法之插入排序

插入排序非常类似于整扑克牌。
在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。
无论什么时候,左手中的牌都是排好序的。
也许你没有意识到,但其实你的思考过程是这样的:现在抓到一张7,把它和手里的牌从右到左依次比较,7
比10小,应该再往左插,7
比5大,好,就插这里。为什么比较了10和5就可以确定7的位置?为什么不用再比较左边的4和2呢?因为这里有一个重要的前提:手里的牌已经是排好序的。现在我插了7之后,手里的牌仍然是排好序的
,下次再抓到的牌还可以用这个方法插入。编程对一个数组进行插入排序也是同样道理,但和插入扑克牌有一点不同,不可能在两个相邻的存储单元之间再插入一个单元,因此要将插入点之后的数据依
次往后移动一个单元。

array_a=[12,23,11,9,5,15,13,48,37,6]
loop_num=0
swap_num=0
for index in range(1,len(array_a)): #index从1开始循环,因为从数组的第二个元素开始比较,比较数组元素个数-1次
insert_value=array_a[index] #定义1个变量,用于保存当前需插入的数组元素值
position=index #定义一个变量,用于保存需要插入数组下标位置,用于控制循环
while position>0 and array_a[position-1]>insert_value: #当position大于0表示最多放在数组的第一个位置,第二个条件表示从右向左(已经排好序的数组)比较要插入的值大小。
array_a[position]=array_a[position-1] #把排好序数组右边的值向右移动,覆盖掉要插入的值位置,因为要插入的值已经保存到insert_value中。
swap_num+=1
position-=1 #将p值减1是为了继续从右向左比较大小,找到合适的位置。
array_a[position]=insert_value #找到合适的位置后,就将插入的值放在该位置上,完成插入。
print(array_a) #打印每一次的移动情况
print("swap_loop=",swap_num)
'''
结果:
[12, 23, 11, 9, 5, 15, 13, 48, 37, 6] 比较数组0和1,不交换
[11, 12, 23, 9, 5, 15, 13, 48, 37, 6] 2和1,2和0比较,比较后先把1移动到2位置,再把0移动到1的位置,最后把2移动到0的位置。完成插入
[9, 11, 12, 23, 5, 15, 13, 48, 37, 6]
[5, 9, 11, 12, 23, 15, 13, 48, 37, 6]
[5, 9, 11, 12, 15, 23, 13, 48, 37, 6]
[5, 9, 11, 12, 13, 15, 23, 48, 37, 6]
[5, 9, 11, 12, 13, 15, 23, 48, 37, 6]
[5, 9, 11, 12, 13, 15, 23, 37, 48, 6]
[5, 6, 9, 11, 12, 13, 15, 23, 37, 48]

转载于:https://www.cnblogs.com/xsfy/p/10791109.html

相关文章:

  • swift学习笔记1
  • 关于可变参数varargs
  • Educational Codeforces Round 64 -C(二分)
  • Windows 10一个很愚蠢的做法
  • 英语影视台词---无敌破坏王2大脑互联网
  • 开源CMS比较
  • 《Linux就该这么学》第2章 新手必须掌握的Linux命令
  • 火狐浏览器问题踩坑
  • Qtum量子链周报(4月29日-5月5日)
  • vue配合webpack使用sentry对错误日志监控
  • Leetcode PHP题解--D54 937. Reorder Log Files
  • upc组队赛18 THE WORLD【时间模拟】
  • Spring Boot 配置阿里druid数据库连接池
  • 设计模式学习04:代理模式
  • 图床失效了?也许你应该试试这个工具
  • 【EOS】Cleos基础
  • 30秒的PHP代码片段(1)数组 - Array
  • CSS中外联样式表代表的含义
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Js基础知识(四) - js运行原理与机制
  • Markdown 语法简单说明
  • quasar-framework cnodejs社区
  • Shadow DOM 内部构造及如何构建独立组件
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 浮动相关
  • 机器学习学习笔记一
  • 目录与文件属性:编写ls
  • 使用Swoole加速Laravel(正式环境中)
  • 小程序测试方案初探
  • 转载:[译] 内容加速黑科技趣谈
  • 06-01 点餐小程序前台界面搭建
  • 【云吞铺子】性能抖动剖析(二)
  • k8s使用glusterfs实现动态持久化存储
  • #define
  • (1)(1.11) SiK Radio v2(一)
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二)JAVA使用POI操作excel
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (算法)Game
  • (转) 深度模型优化性能 调参
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .NET 8.0 发布到 IIS
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .net6使用Sejil可视化日志
  • [ C++ ] STL_list 使用及其模拟实现
  • [Android] Android ActivityManager
  • [CDOJ 838]母仪天下 【线段树手速练习 15分钟内敲完算合格】
  • [EFI]Atermiter X99 Turbo D4 E5-2630v3电脑 Hackintosh 黑苹果efi引导文件
  • [HCTF 2018]WarmUp (代码审计)
  • [iOS]随机生成UUID通用唯一识别码
  • [LeetCode] Sort List
  • [Machine Learning] 领域适应和迁移学习
  • [NLP] 使用Llama.cpp和LangChain在CPU上使用大模型