插入排序的思想:

插入排序的思想就是将待排序的数据插入到其合适的位置。我们先从一个简单的例子开始,假如现在有

lst= [1,2,6,7,5]

这个list基本有序,只要将5放到6之前就能完成排序。从7开始遍历,比5大的向右移动,遇到小于5的就停下来.
具体来说,从7开始向左遍历,遇到比5大的数向右移动,遇到小于等于5的数就停下来,这个位置就是5应该在的位置。但是当7向右移动的时候,占据的5的位置,那么就需要把5这个位置的数据保存下来,同时还需要把向左遍历时的索引记录记下来,最后索引停下的地方,就是5应该在的位置

实现

def insert(lst,index):if lst[index-1] < lst[index]:returntemp = lst[index]temp_index = indexwhile temp_index > 0 and lst[index-1] > temp:lst[temp_index] = lst[temp_index-1]temp_index = temp_index - 1lst[temp_index] = tempdef insert_sort(lst):for i in range(1,len(lst)):insert(lst,i)lst = [10,3,9,1,7]
insert_sort(lst)
print(lst)

过程详细注释解析

def insert(lst,index):if lst[index - 1] < lst[index]:#如果需要比较的数的前面的数比当前的数小,那还比啥比,直接return返回return#当上面不成立的时候,说明需要比较了。temp = lst[index] #记住当前要比较的数temp_index = index #记住当前的索引while temp_index > 0 and lst[temp_index - 1] > temp:#当索引比0大而且前面的数却是比当前的数大,那么进入这个循环lst[temp_index] = lst[temp_index - 1] #把当前的位置的数据变为前面的比自己大的数据temp_index = temp_index - 1 #索引向前移动一个,防止前面还需要比较,也就是当前的位置还不是最终放的位置lst[temp_index] = temp # 对lst[temp_index] = temp的解释# 刚才我们不是把当前的位置数据用前面一个数据覆盖了吗?# 这个过程在while中会不断出现,直到找到正确的位置,找到正确的位置后,我们要将该位置的数据改为我们当前的temp。# 比如一轮循环后,lst应该变成了[1,2,6,7,7],再一轮循环后,lst变成了[1,2,6,6,7]。# 此时5找到了合适的位置了,那么这个6已经往后移动了,我们需要将第一个6替换为5def insert_sort(lst):for i in range(1,len(lst)):#这个地方从1开始,因为我们进入insert函数后,是有个index-1的,我们还是从第一个元素开始比较的,没问题。不可以从0开始,从0开始就越界了。insert(lst,i)
lst = [1,2,6,7,5]
insert_sort(lst)
print(lst)

我们输出一下在while循环中每次的lst看下,

可以看出和上面的分析是一样的

我们再看看每一轮排序后的lst

这其中while的循环是选择排序的灵魂所在

python插入排序实现及详解相关推荐

  1. python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

  2. python字典之defaultdict详解

    python字典之defaultdict详解 defaultdict为你的字典设定一个默认值或者默认值的数据类型: defaultdict接受一个工厂函数作为参数,如下来构造: dict =defau ...

  3. Python数据科学-技术详解与商业实践视频教程

    Python数据科学-技术详解与商业实践(八大案例) 网盘地址:https://pan.baidu.com/s/13QrR_5Er6LgWCWzSb7qOrQ 提取码:s7vw 备用地址(腾讯微云): ...

  4. python turtle循环图案-Python内置模块turtle绘图详解

    urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的 ...

  5. python爬虫入门实例-Python爬虫天气预报实例详解(小白入门)

    本文研究的主要是Python爬虫天气预报的相关内容,具体介绍如下. 要求是把你所在城市过去一年的历史数据爬出来. 分析网站 我们可以看到,我们需要的天气数据都是放在图表上的,在切换月份的时候,发现只有 ...

  6. python 自动化-Python API 自动化实战详解(纯代码)

    主要讲如何在公司利用Python 搞API自动化. 1.分层设计思路 dataPool :数据池层,里面有我们需要的各种数据,包括一些公共数据等 config :基础配置 tools : 工具层 co ...

  7. python序列类型-python序列类型种类详解

    python序列类型包括哪三种 python序列类型包括:列表.元组.字典 列表:有序可变序列 创建:userlist = [1,2,3,4,5,6] 修改:userlist[5] = 999 添加: ...

  8. python流程控制语句-python学习 流程控制语句详解

    ###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的 ...

  9. python之sys模块详解_(转)python之os,sys模块详解

    python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...

最新文章

  1. CentOS7升级JDK
  2. 翻译Raywenderlich 最新文章What’s New in Swift 4
  3. redis php操作日志,php-redis笔记
  4. Google的三篇大数据思想论文
  5. 全志A33-编译uboot
  6. 无法嵌入互操作类型 请改用适用的接口_西门子COMOS软件开发定制学习7-嵌入谷歌浏览器内核...
  7. 面试题之Java内存区域
  8. Linux 命令之 nohup 后台运行程序,tail 实时查看文件内容
  9. C++ memset()函数和bzero()函数
  10. 【Pix4d精品教程】pix4d mapper相机未校准后手动添加连接点完美案例图文教程
  11. 激励函数-Activation Funciton
  12. 安装nvidia驱动和cuda工具包
  13. 未来科学大奖 计算机,未来科学大奖
  14. 开源虚拟机工具_使用开源工具与虚拟乐高玩
  15. 前端免费图标icon的使用方法和获取
  16. [世界杯] 韩国 vs 多哥 2:1
  17. Android RemoteViews----RemoteViews应用
  18. uniapp微信小程序项目启动步骤
  19. (转)企业级NFS网络文件共享服务
  20. FMEA培训-FMEA七步法具体怎么做?

热门文章

  1. python练手小程序—调整图片分辨率(大小)
  2. java实验四 综合应用实验
  3. Jini 能给您带来什么
  4. WSN连通性模拟、WSN覆盖率模拟、WSN分簇模拟、WSN能量损耗模拟
  5. 用CSS画小猪佩奇,你就是下一个社会人!
  6. 代码:法向质心法提取线激光条纹中心线(CPP+OpenCV)
  7. js验证固定电话(座机)、手机号码
  8. 2017.12.5 八周第二次课
  9. 协同过滤推荐算法及应用
  10. python xlsxwriter不覆盖写入_python学习-xlsxwriter模块