实验报告
1. 问题
二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k
按模板格式编写问题、解析、设计和分析所有部分。
2. 解析
3. 设计
void merge(int l, int m, int r){
int b[maxn];
int k=1;
int i=l,j=m+1;
while(i<=m&&j<=r)if(a[i]<=a[j])b[k++]=a[i++];
else b[k++]=a[j++];
if(i==m+1)while (j <=r)b[k++] = a[j++];
if (j == r + 1)while (i <= m)b[k++] = a[i++];
for(j=1,i=l;j<k;i++,j++)a[i]=b[j];
}
void mergeSort(int l,int r)
{
if(l>=r)return;
int m=(l+r)/2;
mergeSort(l,m);
mergeSort(m+1,r);
merge(l,m,r);
}
4. 分析
时间复杂度:O(nlogn)
空间复杂度:O(n)
5. 源码
https://github.com/moshang1113/mergeSort