分析算法的一些思路
- 假定没有并发操作
- 一般不关心精度
- 不考虑内存层面结构
- 输入规模:输入的项数
- 运行时间:执行的基本操作数或步数
- 最好与最坏情况
- 计算的时候我们一般只求最坏情况(代替平均情况)
- 最坏情况是一个上界
- 最坏情况经常出现(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
如果你想成为一个程序员,只要两年中每天坚持编程就能成为程序员;如果想成为世界级程序员,你既可以十年如一日地坚持每天编程,也可以两年每天编程,然后上一门算法课。