作业4 二分归并排序

1.     问题

给定n个不同的数构成的数组T[1..n],使用二分归并排序对数组进行排序,其中n=2^k

2.     解析

二分归并排序主要有两个大步骤

1.将数组分为两部分,并分别进行二分归并排序

2.将排序好的两部分进行归并。

整个过程是一个递归的过程

3.     设计

MergeSort(T,left,right)

{

       If(left == right)

              Return

       Else

       {

              Mid = left+right/2;

              MergeSort(T,left,Mid);

              MergeSort(T,Mid+1,right);

              Merge(T,left,Mid,Mid+1,right);

       }

}

Merge(T,left1,right1,left2,right2)

{

       Char* tmp;

       Int index = 0;

       Start = left1;

       Lenth = right-left-1;

       While(index<length)

       {

              If(T[left1] < T[left2] || left2== right2)

                     Tmp[index++] = T[Left1++];

              Elif(T[left2] < T[left1] || left1== right1)

                     Tmp[index++] = T[Left2++];

       }

       For(I;I < length;i++)

              T[start+i] = Tmp[i]

}

4.     分析

 

 

 好像无法直接复制word中的分数,因此就用截图来代替了。

对于算法的分析这一块还是比较重要的,在通过推断得出了结果后,还需要通过严谨的数学证明来确认。

对于分治的算法,因为经常大的问题分成小的问题,因此经常可以写出递推方程。

复杂度的计算方法应该也大同小异

5.     源码

https://github.com/fanchile/Algorithm

猜你喜欢

转载自www.cnblogs.com/Fanchile/p/12516635.html
今日推荐