1、算法的数学基础
①函数渐进的界——O、o、Ω、、。
②求和方法——等比、等差、调和级数。
③递推方式求解
例子:插入排序
InsertSort(A, n)
输入
输出
1.for <-2 to n do //第一个直接放入,不需排序
2. x <- A[j] //将待排的元素取出
3. i <- j-1 //i代表排好序的元素个数
4. while i>0 and x<A[j] do //遍历比较排好序的元素插入
5. A[i+1]<-A[i]
6. i <- i-1
7. A[i+1] <- x
//两层循环,最坏时间复杂度为O(n^2)
W(n) = W(n- 1) + n - 1 W(1) = 0 ===> W(n) = n(n-1)/2 = O(n^2)
例子:二分归并排序
MergeSort(A, p, r)
输入
输出
1.if p<r
2.then q<-⌊(p+r)/2⌋ //将原数组划分为两个子数组
3.MergeSort(A, p, q) //递归调用
4.MergeSort(A, p+1, r)
5.Merge(A, p, q, r) //归并
Merge(A, p, q, r)
1.x <- q-p+1, y <- r-q //将两个子数组的元素数赋给x,y
2.将A[p...q]复制到B[1...x],将A[q+1...r]复制到C[1...y]
3.i <- 1, j <- 1, k <- p //i, j都从1开始,k从排序数组的第一个位置开始
4.While i<=x and j<=y do
5. if B[i]<=C[j]
6. then A[k] <- B[i]
7. i <- k+1
8. else A[k] <- B[i] j <- j+1
9. k <- k+1
10. if i>x then 将C[]中剩下的移入
11. else 将B[]中剩下的移入
W(n) = 2W(n/2) + n -1 W(1) = 0 ===> W(n) = O(nlogn)