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中的分数,因此就用截图来代替了。
对于算法的分析这一块还是比较重要的,在通过推断得出了结果后,还需要通过严谨的数学证明来确认。
对于分治的算法,因为经常大的问题分成小的问题,因此经常可以写出递推方程。
复杂度的计算方法应该也大同小异