作业比赛编号 : 100000586 - 《算法笔记》4.6小节——算法初步->two pointers B基础排序III:归并排序
(问题A平台有问题,无人做对)
#include<stdio.h>
void merge(int a[],int l1,int r1,int l2,int r2)
{
int i=l1;
int j=l2;
int b[r2-l1+1];
int index=0;
while(i<=r1&&j<=r2){
if(a[i]<a[j])
b[index++]=a[i++];
else b[index++]=a[j++];
}
while(i<=r1)
b[index++]=a[i++];
while(j<r2)
b[index++]=a[j++];
for(int k=0;k<index;k++)
a[l1+k]=b[k];
}
void mergeSort(int a[],int left,int right)
{
if(left<right)
{
int mid=(left+right)/2;
mergeSort(a,left,mid);
mergeSort(a,mid+1,right);
merge(a,left,mid,mid+1,right);
}
}
int main()
{
int n,m;
while(scanf("%d",&n)!=EOF)
{for(int i=0;i<n;i++)
{
scanf("%d",&m);
int a[m];
for(int i=0;i<m;i++)
{
scanf("%d",&a[i]);
}
mergeSort(a,0,m-1);
for(int i=0;i<m;i++)
printf("%d\n",a[i]);
}
}
return 0;
}
/**************************************************************
Problem: 3105
User: **********
Language: C++
Result: 正确
Time:58 ms
Memory:1852 kb
****************************************************************/