我们先归纳性地假设前 n−1n-1 个元素已经完成排序,现在要将第 n<script id="MathJax-Element-2" type="math/tex">n</script> 个元素插入到正确位置。

如下为递归版的插入排序的代码清单:

# n == len(seq)-1, seq[n] 表示序列的最后一个元素
def ins_sort_rec(seq, n):if n == 0: return ins_sort_rec(seq, n-1)j = nwhile j > 0 and seq[j-1] > seq[j]:seq[j-1], seq[j] = seq[j], seq[j-1]j -= 1

幸运的是,任何递归函数都可以被重写成相应的迭代操作(反之亦然)

如下是我们更为熟知的迭代版的插入排序,它将后退式递归调用改成了从第一个元素开始的前进式迭代操作:

def ins_sort(seq):for i in range(1, len(seq)):j = iwhile j > 0 and seq[j-1] > seq[j]:seq[j-1], seq[j] = seq[j], seq[j-1]j -= 1

Python 数据结构与算法——插入排序(insertion sort)相关推荐

  1. Python 数据结构与算法 —— 插入排序

    本文你将学会如下的要点: 使用 Python 语言进行算法设计时,和 C 语言实现相比,需要注意哪些问题 如何尽可能少地利用辅助空间,因为在 Python 编程环境中,定义一个 list实在是唾手可得 ...

  2. C语言插入排序Insertion Sort算法(附完整源码)

    插入排序Insertion Sort算法 插入排序Insertion Sort算法的完整源码(定义,实现,main函数测试) 插入排序Insertion Sort算法的完整源码(定义,实现,main函 ...

  3. python实现排序算法_python实现·十大排序算法之插入排序(Insertion Sort)

    简介 插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法实现步骤 从第一个元素开 ...

  4. python sort 逆序_python实现·十大排序算法之插入排序(Insertion Sort)

    简介 插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法实现步骤 从第一个元素开 ...

  5. [转载] python实现基本算法之插入排序(Insertion Sort)

    参考链接: Python中的插入排序insertion sort 基本算法之插入排序(Insertion Sort) 基本算法-02.插入排序(Insertion Sort)算法 冒泡排序已经发布,大 ...

  6. C语言以递归实现插入排序Insertion Sort算法(附完整源码)

    以递归实现插入排序Insertion Sort算法 以递归实现插入排序Insertion Sort算法的完整源码(定义,实现,main函数测试) 以递归实现插入排序Insertion Sort算法的完 ...

  7. python数据结构与算法13_python 数据结构与算法 (13)

    python 数据结构与算法 (13) 选择排序 (Selection sort) 是? 种简单直观的排序算法. 它的? 作原理如 下.? 先在未排序序列中找到最?(?)元素, 存放到排序序列的起始位 ...

  8. python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

    python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...

  9. python数据结构和算法3 栈、队列和排序

    顺序表和链表都是线性表,线性数据 栈 stack,也叫堆栈,是一种容器,可存入元素.访问元素.删除元素,特点是只允许在容器的一端(栈顶,top)进行加入数据(压栈,push)和输出数据(pop),按照 ...

最新文章

  1. 酒店用机器学习,预测哪些客人会放鸽子
  2. Python_函数做字典的值
  3. docker容器的标准使用过程_跟我一起学docker(四)--容器的基本操作
  4. Ocelot-基于.NET Core的开源网关实现
  5. excel批量插入 配置yml
  6. 策略设计模式_设计模式之 策略模式
  7. 最简单的嵌套循环,一句话即可。适合repeater,dropdownlist,gridview等等
  8. jmail 发送html,jmail发送html格式的邮件
  9. (五)Excel函数应用之查询与引用函数
  10. [科普] 狭义相对论
  11. 超级计算机运算中心,中国科学技术大学超级计算中心
  12. 2019.11.20 LS-Dyna与MSC.Dytran特点
  13. Reverse-2 - PE文件
  14. Flume介绍和使用
  15. zynq linux tf卡系统升级,zynq之TF卡写入常见问题
  16. 安卓录屏软件实现 开维PRA自动生成代码Ctrl.js
  17. 强大且免费的文本转换工具,word转其他格式,epub转换
  18. c语言函数已知底数和幂求指数,用C语言求幂函数和指数函数的方法
  19. 安兰德《源泉》读后感:愿年轻人都能有志气
  20. 移动硬盘计算机无法打开硬盘,无法正常读取2T移动硬盘,让我教您一个轻松修复的窍门...

热门文章

  1. Oracle账户的umask,AIX的Umask
  2. Android:沉浸式状态栏(二)集成
  3. MySQL Front远程连接数据库
  4. android开发入门配置,Android开发入门——Andoird Studio的安装与配置
  5. java接口的叙述正确的_下列关于接口的描述中,正确的是:
  6. 人工智能目标检测模型(四)——ResNet
  7. #C++初学记录(算法测试2019/5/5)(深度搜索)
  8. [NOIP2017 TG D2T2]宝藏(模拟退火)
  9. Uva 12657 Boxes in a Line 双向链表
  10. listview拖动优化问题