2.1 插入排序
插入排序是一个对少量元素进行排序的有效算法,工作原理类似于扑克牌的插入过程:在排好子数组A[1..j-1]后,将元素A[j]插入,形排好序的子数组A[1..j]。
伪代码:
C代码:
循环不变式,主要用来帮助我们理解算法的正确性。对于循环不变式,必须证明它的三个性质:
- 初始化:它在循环的第一轮迭代开始之前,应该是正确的。
- 保持:如果在循环的某一次迭代开始之前它是正确的,那么,在下一次迭代开始之前,它也应该保持正确。
- 终止:当循环结束时,不变式给了我们一个有用的性质,它有助于表明算法是正确的。
2.2 算法分析
算法分析即指对一个算法所需要的资源进行预测。通常,资源是指我们希望测度的计算时间。
一般来说,算法所需时间是与输入规模同步增长的,因而常常将一个程序的运行时间表示为其输入的函数。
插入排序的算法分析:
最坏情况:整个数组时逆序的,θ(n2 )
最好情况:整个数组已经排序好,θ(n)
2.3 算法设计
分治法:
分解:将原问题分解成一系列子问题;
解决:递归地解各子问题。如子问题足够小,则直接求解;
合并:将子问题的结果合并成原问题的解。
归并排序:
C代码:
最坏情况下时间复杂度为θ(nlogn)