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

插入排序——算法导论1

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

分析算法的一些思路

  • 假定没有并发操作
  • 一般不关心精度
  • 不考虑内存层面结构
  • 输入规模:输入的项数
  • 运行时间:执行的基本操作数或步数
  • 最好与最坏情况
  • 计算的时候我们一般只求最坏情况(代替平均情况)
    • 最坏情况是一个上界
    • 最坏情况经常出现(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补到相应位置即可

图解

插入排序-算法导论课堂笔记1_第1张图片

实现

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

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

你可能感兴趣的:(Python,算法,算法,python)