插入排序和归并排序

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)

猜你喜欢

转载自blog.csdn.net/a096030098/article/details/44177221