I
INSERTION-SORT
1 for j =2 to n
2 A[j]=key //把键值插到已经排好的A[1.j-1]
i=j-1
3 while i>0 and A[i] >key
4 A[i+1]=A[i] // 把比键值大的元素向右边移动一格
5 i=i-1
A[i+1]=key
最坏运行时间 Θ(n^2)
分治法
MERGE(A,p,q,r) // 把要排序的数组分成两半 ,排好序之后合并 我们假设 A[ p...q] 和A[q+1....r] 都已经排好序了
1 n1=q-p+1 //第一个数组元素
2 n2=r-q //第个组数组元素
3 使 L[1.......n1+1] R[1..........n2+1] 为两个新的数组
4 for i=1 to n1
5 L[i]=A[p+i-1]
6 for i=1 to n2
7 R[j]=A[q+j]
8 L[n1+1]= ∞ //取哨兵牌
9 R[n2+1]= ∞
10 i=1
11 j=1
12 for k=p to r
13 if L[i]<=R[j]
14 A[k]=L[i]
15 i=i+1
16 else A[k]=R[j]
17 j=j+1
归并算法分析
递归式 T(n)=2T(n/2) +cn ; 递归树具有lgn+1 层 每层代价为cn ,最坏运行时间 Θ(nlgn)
选择排序法
SELECTION-SORT(A) 执行次数
1 for j = 1 to Length(A) n
2 i = j n
3 key = A(i) n
4 for i to Lenth(A) n(n+1)/2
5 if key>A(i) ...
6 key = A(i) ...
7 k = i ...
8 A(k) = A(j) //交换找到的A[j]的存放在key的位置上
9 A(j) = key ...
所以run time is Θ(n*n)