插入排序——算法导论1

  • 分析算法的一些思路
  • 伪代码pseudocode
  • 思路
  • 图解
  • 实现
  • tips

分析算法的一些思路

  • 假定没有并发操作
  • 一般不关心精度
  • 不考虑内存层面结构
  • 输入规模:输入的项数
  • 运行时间:执行的基本操作数或步数
  • 最好与最坏情况
  • 计算的时候我们一般只求最坏情况(代替平均情况)
    • 最坏情况是一个上界
    • 最坏情况经常出现(eg查询数据库中不存在的值)
    • 平均情况和最坏大致一样差
  • 增长量级(渐进分析)
    • 忽略了实际语句代价,也忽略各语句抽象代价c
    • 低阶项一般不重要

伪代码pseudocode

input:A[1....n]for j ←2 to n:do key←A[j]i ←j-1where i >0 and A[i]>key:do A[i+1]←A[i]i = i-1A[i+1]←key

麻省理工老师给的示例伪代码,注意此处是1到n

思路

  • 这里主要是保证选中的关键值(key)之前的序列一定是排好序的,所以找到第一个比key小的(从小到大排序),就可停止
  • 假设比key大,直接后移即可,最后key补到相应位置即可

图解

实现

def insert_sort(A:list):n = len(A)for j in range(1, n):key = A[j]i = j - 1while i >= 0 and key < A[i]:A[i+1] = A[i]i = i - 1A[i+1] = keyl = [5,2,4,6,1,3]
insert_sort(l)
print(l)

tips

如果你想成为一个程序员,只要两年中每天坚持编程就能成为程序员;如果想成为世界级程序员,你既可以十年如一日地坚持每天编程,也可以两年每天编程,然后上一门算法课。

插入排序-算法导论课堂笔记1相关推荐

  1. 算法导论读书笔记(7)

    算法导论读书笔记(7) 目录 快速排序 快速排序的简单Java实现 快速排序的性能 最坏情况划分 最佳情况划分 快速排序的随机化版本 比较排序 快速排序 快速排序是一种原地排序算法,对包含 n 个数的 ...

  2. 算法导论读书笔记(8)

    算法导论读书笔记(8) 目录 计数排序 计数排序的简单Java实现 基数排序 基数排序的简单Java实现 桶排序 计数排序 计数排序 假设 n 个输入元素中的每一个都是介于0到 k 之间的整数,此处 ...

  3. 算法导论读书笔记(19)

    http://www.cnblogs.com/sungoshawk/p/3802553.html 算法导论读书笔记(19) 目录 最优二叉搜索树 步骤1:一棵最优二叉查找树的结构 步骤2:一个递归解 ...

  4. 算法导论中C语言代码,算法导论-学习笔记与进度

    算法导论 阅读进度 第一部分 基础知识 第一章 计算中算法的角色 Done 1.1 算法 输入与输出 算法可以解决哪些问题 数据结构 技术 一些比较难的问题 1.2 作为一种技术的算法 效率 算法和其 ...

  5. 算法导论读书笔记-第十九章-斐波那契堆

    算法导论第19章--斐波那契堆 可合并(最小)堆(mergeable min-heap) : 支持以下5种操作的一种数据结构, 其中每一个元素都有一个关键字: MAKE-HEAP(): 创建和返回一个 ...

  6. 算法导论学习笔记 第2章 算法基础

    本章介绍了一个贯穿本书的框架,后续的算法设计都是在这个框架中进行的. 本章通过插入排序和归并排序两种常见的算法来说明算法的过程及算法分析,在分析插入排序算法时,书中是用了循环不变式证明了算法的正确性, ...

  7. 《算法导论》笔记--平摊分析

    对于一个操作的序列来讲,平摊分析(Amortize Analysis)得出的是在特定问题中这个序列下每个操作的平摊开销. 一个操作序列中,可能存在一.两个开销比较大的操作,在一般地分析下,如果割裂了各 ...

  8. 【算法导论学习笔记】第3章:函数的增长

    原创博客,转载请注明: http://www.cnblogs.com/wuwenyan/p/4982713.html  当算法的输入n非常大的时候,对于算法复杂度的分析就显得尤为重要,虽然有时我们能通 ...

  9. 算法导论学习笔记 第7章 快速排序

    对于包含n个数的输入数组来说,快速排序是一种时间复杂度为O(n^2)的排序算法.虽然最环情况的复杂度高,但是快速排序通常是实际应用排序中最好的选择,因为快排的平均性能非常好:它的期望复杂度是O(nlg ...

最新文章

  1. Linux分区的认识
  2. python自学视频-师傅带徒弟学Python:第一篇Python基础视频课程
  3. 最简单的 java 防反编译技巧
  4. 将 app 打包成 deb 发布安装
  5. 【可运行,刘汝佳代码】Trees on the level UVA - 122
  6. 共轨之家获吉利家族基金新一轮融资 5个月前曾获磐霖资本领投A轮融资
  7. extern 在c/c++ 中的作用
  8. [leetcode]5340. 统计有序矩阵中的负数
  9. go - range
  10. python保留字符串之外的_Python--字符串
  11. Lattice Diamond在线调试Reveal Analyzer使用教程
  12. 免费查看并下载知网文献
  13. 金融网站服务器防护CC攻击,WAF启到哪些重要作用?
  14. 大型分布式网站架构如何设计
  15. 干货 | Elasticsearch 索引生命周期管理 ILM 实战指南
  16. 四百左右的蓝牙耳机有哪些?四百左右好用的蓝牙耳机推荐
  17. YOLO中MAP的具体计算
  18. 使用 Siri 拨打电话并使用电话功能的技巧
  19. 悖论在计算机中的应用,信息悖论
  20. LeetCode1710——卡车上的最大单元数

热门文章

  1. 入行人工智能,最快的方法是考研吗?
  2. canvas像素操作 取色器 写入像素数据 缩放和反锯齿 保存图片
  3. asp.net小说网系统VS开发物业sqlserver数据库web结构c#编程计算机网页源码项目
  4. 数据库的一些基本概念
  5. 致远个性化之--明细表数据重复判断,并显示重复数据
  6. 基于ASP的勤工俭学管理系统
  7. CreatorPrimer | 物理小游戏(碰撞事件监听)
  8. 人体一机竞技格斗机器人_工匠社发布首款“人机一体”消费级竞技格斗机器人...
  9. httpclient使用系列
  10. matlab sapi.spvoice,matlab说话和唱歌