python插入排序实现及详解
插入排序的思想:
插入排序的思想就是将待排序的数据插入到其合适的位置。我们先从一个简单的例子开始,假如现在有
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插入排序实现及详解相关推荐
- python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解
本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...
- python字典之defaultdict详解
python字典之defaultdict详解 defaultdict为你的字典设定一个默认值或者默认值的数据类型: defaultdict接受一个工厂函数作为参数,如下来构造: dict =defau ...
- Python数据科学-技术详解与商业实践视频教程
Python数据科学-技术详解与商业实践(八大案例) 网盘地址:https://pan.baidu.com/s/13QrR_5Er6LgWCWzSb7qOrQ 提取码:s7vw 备用地址(腾讯微云): ...
- python turtle循环图案-Python内置模块turtle绘图详解
urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的 ...
- python爬虫入门实例-Python爬虫天气预报实例详解(小白入门)
本文研究的主要是Python爬虫天气预报的相关内容,具体介绍如下. 要求是把你所在城市过去一年的历史数据爬出来. 分析网站 我们可以看到,我们需要的天气数据都是放在图表上的,在切换月份的时候,发现只有 ...
- python 自动化-Python API 自动化实战详解(纯代码)
主要讲如何在公司利用Python 搞API自动化. 1.分层设计思路 dataPool :数据池层,里面有我们需要的各种数据,包括一些公共数据等 config :基础配置 tools : 工具层 co ...
- python序列类型-python序列类型种类详解
python序列类型包括哪三种 python序列类型包括:列表.元组.字典 列表:有序可变序列 创建:userlist = [1,2,3,4,5,6] 修改:userlist[5] = 999 添加: ...
- python流程控制语句-python学习 流程控制语句详解
###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的 ...
- python之sys模块详解_(转)python之os,sys模块详解
python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...
最新文章
- CentOS7升级JDK
- 翻译Raywenderlich 最新文章What’s New in Swift 4
- redis php操作日志,php-redis笔记
- Google的三篇大数据思想论文
- 全志A33-编译uboot
- 无法嵌入互操作类型 请改用适用的接口_西门子COMOS软件开发定制学习7-嵌入谷歌浏览器内核...
- 面试题之Java内存区域
- Linux 命令之 nohup 后台运行程序,tail 实时查看文件内容
- C++ memset()函数和bzero()函数
- 【Pix4d精品教程】pix4d mapper相机未校准后手动添加连接点完美案例图文教程
- 激励函数-Activation Funciton
- 安装nvidia驱动和cuda工具包
- 未来科学大奖 计算机,未来科学大奖
- 开源虚拟机工具_使用开源工具与虚拟乐高玩
- 前端免费图标icon的使用方法和获取
- [世界杯] 韩国 vs 多哥 2:1
- Android RemoteViews----RemoteViews应用
- uniapp微信小程序项目启动步骤
- (转)企业级NFS网络文件共享服务
- FMEA培训-FMEA七步法具体怎么做?