2.1 插入排序
for j <- 2 to length[A]
do key <- A[j]
//将A[j]插入A[1...j-1]
i = j - 1
while i > 0 and A[i] > key
A[i + 1] <- A[i]
i <- i - 1
A[i + 1] <- key
正确性证明:循环不变式A[1…j-1]
- 初始化:循环第一次迭代前为真
- 保持:若循环的某次迭代前为真,那么下次迭代前它仍然为真
- 终止:在循环终止时,不变式提供一个性质,该性质有助于证明算法正确性
2.2 分析算法
-
描述算法所用资源及其代价的模型:随机访问机RAM模型
-
最坏情况与平均情况分析:往往考虑最坏情况(例如输入数组是反向排好序的)
-
增长量级:只考虑运行时间公式中最重要的项,如Θ(n^2)
2.3 算法设计
-
分治法(Divide Conquer Combine)
归并排序
-
归并排序的分析:递归树