在学习排序算法时,我们可以经常看到插入排序的身影。我们继续用扑克牌来描述该算法的实现方式。假设有5张牌以如下方式堆放在桌面上:

将面上的一张牌拿起并放在手上:

因为这是第一张牌,所以我们无需考虑其位置。接着再从桌面上拿起面上的一张牌并与手上的牌进行比较,然后插入到正确的位置上:

接下来的操作与此相同。将梅花5取出然后放在梅花3和梅花8之间:

重复该过程直到所有的牌都从桌上拿起并插入到手中几张牌中的正确位置。

整个过程中,插入排序同时维护两组元素,一组排序后的元素和一组待排序的元素。在上面的扑克牌例子中,桌上的一叠扑克就是待排序的元素组,手上的牌则是排序后的元素组。在程序中处理该算法时,我们将在同一序列结构中处理这两组元素。算法以列表左侧作为排序后的元素位并始终从未排序组中取出第一位进行排序操作。要定位一个元素的正确位置,必须通过搜索来解决,然后移动右边的各元素来为其让位。下面用Python实现一个简单的插入排序算法:

#Sorts a sequence in ascending order using the insertion sort algorithm.

def insertionSort( theSeq ):

n = len(theSeq)

# Starts with the first item as the only sorted entry.

for i in range( 1, n ):

# Save the value to be positioned.

value = theSeq[i]

# Find the position where value fits in the ordered part of the list.

pos = i

while pos > 0 and value < theSeq[pos - 1]:

# Shift the items to the right during the search.

theSeq[pos] = theSeq[pos - 1]

pos -= 1

# Put the saved value into the open slot.

theSeq[pos] = value

insertionSort()方法首先假设列表中的第一个元素已经在其正确的位置上。然后从第二位开始迭代并对每一个元素执行排序。由此,排序后的组始终处于列表的前部而待排序的组则处于尾部。循环中的i可以看作这两组的分界点。在内循环中,程序对当前元素进行定位,同时移动列表中的元素以为其腾出位置来。下图演示了一个列表排序的整个过程。

更多请参考:Rance D. Necaise - 《Data Structures and Algorithms Using Python》

python插入排序_从Python看排序:插入排序相关推荐

  1. 第一章 第一节:Python基础_认识Python

    Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...

  2. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  3. 排序算法python实现_用Python,Java和C / C ++实现的选择排序算法

    排序算法python实现 The Selection Sort Algorithm sorts the elements of an array. In this article, we shall ...

  4. excel python插件_利用 Python 插件 xlwings 读写 Excel

    Python 通过 xlwings 读取 Excel 数据 去年底公司让我做设备管理,多次委婉拒绝,最终还是做了.其实我比较喜欢技术.做管理后发现现场没有停机率统计,而原始数据有,每次要自己在Exce ...

  5. python范例_最佳Python代码范例

    python范例 Python is a general purpose programming language which is dynamically typed, interpreted, a ...

  6. python重构_重构Python应用程序以简化操作

    python重构 Do you want simpler Python code? You always start a project with the best intentions, a cle ...

  7. python 字符识别_使用python进行光学字符识别入门

    python 字符识别 语言模型设计 (Language Model Designing) Optical Character Recognition is the conversion of 2-D ...

  8. 类的继承python事例_【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸...

    作者:白宁超 2016年10月10日22:36:57 摘要:继一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc入门资料包含了基本要点.本文是对文档常用核心要点进行梳理,简 ...

  9. 网络安全用python吗_使用Python进行网络安全渗透——密码攻击测试器

    相关文章: 本篇将会涉及: HTTP 基本认证 对HTTP Basic认证进行密码暴力攻击测试 什么是HTTP 基本认证 HTTP基本认证(HTTP Basic Authentication)是HTT ...

  10. 动态照片墙 python 实现_利用python生成照片墙的示例代码

    这篇文章主要介绍了利用python生成照片墙的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 PIL(Python Im ...

最新文章

  1. 正则判断是否有html标签,正则表达式匹配所有HTML标签,除了和
  2. 【Linux】一步一步学Linux——clear命令(241)
  3. Redis配置文件配置
  4. 阿里云天池 Python训练营Task4: Python数据分析:从0完成一个数据分析实战 学习笔记
  5. 新年元旦海报设计模板|具有浓厚中国风味的画面
  6. Redis缓存持久化:RDB持久化和AOF持久化
  7. 那些拆中台的CTO,70%被裁了
  8. MFC CListCtrl实现双击编辑
  9. 视频格式转换器之视频格式在线转换详细教程
  10. MySQL银行卡验证判断
  11. Redhat8认证考试(第三题)
  12. java bigdecimal 取整数_java-检查BigDecimal是否为整数值
  13. 在内核中创建文件 filp_open/sys_open
  14. 由pytorch中的super().__init__到python中的测试
  15. 生产制造业ERP管理系统财务管理解决方案
  16. 关于背景图background-image
  17. java 自省_javabean的自省机制
  18. rails中使用rjs
  19. jQuery获取(设置)自定义属性值
  20. jquery.nicescroll.js 美化滚动条

热门文章

  1. SAP Fiori Launchpad上的错误消息 - User Parameter /UI2/WD_TRKORR_CUST is not maintained
  2. ButtonRenderer
  3. 使用命令行结合jq提取出Kubernetes配置文件里的secret信息
  4. pandas算加权平均值_4000 字详解TCP超时与重传,看完没收获算我输
  5. linux查文件的前几行,Linux--查询文件的第几行到第几行命令
  6. 复杂的c语言,c语言复杂数据类型
  7. python的实例属性和静态属性表_Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法...
  8. crontab 每分钟一次_Celery实现定时任务crontab
  9. 有效的括号Python解法
  10. 贵州计算机专业强的专科学校,贵州排名靠前的五年制大专学校--贵州计算机学校...