# 先将未排序的元素放到九天之上,一个临时变量temp,上到九天之上去观察前面已经排好的序列,
# 然后从后向前对比,只要临时变量小于某个位置的值,就将其向前移动一位,就是给比它下标大
# 1的位置处赋值,它本身的值.这样它本身的位置空出来了.将九天之上的temp填入此处.直到
# 某个满足这样的条件才跳出循环,算一轮,1.遍历了前面所有的元素了,正常结束循环,算作一轮;2.遇到比temp小或等于的元素
# 此时,打断循环,算作一轮 def InsertSort(myList):
length = len(myList) for i in range(1, length):
temp = myList[i] for j in reversed(range(i)):
if myList[j] > temp:
myList[j + 1] = myList[j]
          myList[j] = temp
       else:
          break
if __name__ == '__main__':
myList = [12, 15, 9, 20, 6, 31, 24]
InsertSort(myList)
print(myList)

  

插入排序的主要思想是每次取一个列表元素与列表中已经排序好的列表段进行比较,然后插入从而得到新的排序好的列表段,最终获得排序好的列表。

比如,待排序列表为[49,38,65,97,76,13,27,49],则比较的步骤和得到的新列表如下:

(带有背景颜色的列表段是已经排序好的,红色背景标记的是执行插入并且进行过交换的元素)

时间复杂度:O(n^2)

待排序:     [49,38,65,97,76,13,27,49]

第一次比较后:  [38,49,65,97,76,13,27,49]     第二个元素(38)与之前的元素进行比较,发现38较小,进行交换

第二次比较后:  [38,49,65,97,76,13,27,49]   第三个元素(65)大于前一个元素(49),所以不进行交换操作,直接到下一个元素比较

第三次比较后:  [38,49,65,97,76,13,27,49]   和第二次比较类似

第四次比较后:  [38,49,65,76,97,13,27,49]   当前元素(76)比前一元素(97)小,(97)后移,(76)继续与(65)比较,发现当前元素比较大,执行插入

第五次比较后:  [13,38,49,65,76,97,27,49]  

第六次比较后:  [13,27,38,49,65,76,97,49]

第七次比较后:  [13,27,38,49,49,65,76,97]

从百度百科上盗了一张图:

最新文章

  1. Android微信分享图片大于32k进行压缩
  2. Sql Server之使用T_SQL创建,修改,查看数据库信息
  3. 使用localResizeIMG微信压缩上传图片安卓报错 weixin://preInjectJSBridge/fail
  4. 【转载】MFC键盘响应
  5. Unity脚本在层级面板中的执行顺序测试2
  6. 专题实验 PGA
  7. Smart20学习记录----异步通知
  8. IDEA加密(转)
  9. 例题6-3 Matrix Chain Multiplication ,Uva 442
  10. [jobdu]二叉树的镜像
  11. ASP.NET之AdRotator实现淘宝浏览页面的商品随机推荐功能
  12. android xml文件中出现如下提醒:This tag and its children can be replaced by one <TextView/> and a compound drawable
  13. vue + ajax + php 接口的使用小接
  14. Ntaub表单开发入门系列 (一)
  15. ASP.NET Core中使用自定义MVC过滤器属性的依赖注入
  16. VSCode中快捷输入HTML代码
  17. Entity Framework入门教程(6)--- 在线场景中保存数据
  18. Unity 和android 交互 记录
  19. django请求接收及文件上传
  20. 深度学习环境搭建(ubuntu16.04+Titan Xp安装显卡驱动+Cuda9.0+cudnn+其他软件)

热门文章

  1. 关于TreeSet集合的理解
  2. 从零开始实现简单 RPC 框架 2:扩展利器 SPI
  3. 跟我一起写 Makefile(十)
  4. awk-02-内置变量
  5. 【笔记】主成分分析法PCA的原理及计算
  6. Windows10公钥远程连接Linux服务器
  7. 超详细,自动化测试接入Jenkins+Sonar质量门禁实践
  8. git忽略文件夹提交以及gitignore修改后不生效的解决办法
  9. leaflet antvPath示例
  10. 十二:Servlet3.0的注解