插入排序伪代码
INSERTION-SORT(A)
for j = 2 to A.length
key = A[j]
i = j - 1
while i > 0 and A[i] > key
A[i+1] = A[i]
i = i - 1
A[i + 1] = key
伪代码的一些约定
1.缩进表示块结构
2.for循环迭代增加使用to,减少用downto
3.若无显式说明,不使用全局变量
4.数组不指向任何对象,赋值NIL
循环不变式
在INSERTION-SORT 的for循环中,循环变量为j。j代表当前正要被插入到序列中的元素的下标。而子数组A[1~j-1]是已经被排好序的子序列。这一性质,在j被赋予初值2,首次进入循环之前成立,而且每次循环之后(j加了1)、进入下一次循环之前也成立。
在第一次进入循环之前成立、每次循环之后还成立的关系称为“循环不变式”
可以利用循环不变关系证明循环的正确性。
分三步走:
1)初始化:证明初始状态时循环不变式成立,即证明循环不变式在循环开始之前为真;
2)保持:即证明每次循环之后、下一次循环开始之前循环不变式仍为真;
3)终止:即证明循环可以在有限次循环之后终止。
其中第1)和2)步类似于数学归纳法的证明策略
分治法
思想:将原问题分解为几个规模较小、但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些