插入排序-算法导论课堂笔记1

分析算法的一些思路

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

伪代码pseudocode

input:A[1....n]
	for j ←2 to n:
		do key←A[j]
			i ←j-1
			where i >0 and A[i]>key:
				do A[i+1]←A[i]
				i = i-1
			A[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 - 1
        while i >= 0 and key < A[i]:
            A[i+1] = A[i]
            i = i - 1
        A[i+1] = key

l = [5,2,4,6,1,3]
insert_sort(l)
print(l)

tips

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜会美丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值