这道题有几个技巧:
1.可以把这道题分成两个部分:第一个部分:拆成只有一个的序列,第二个部分:把这些序列合并。
2.可以用到递归。
#include<iostream>
using namespace std;
const int N=1e3+5;
int a[N];
int b[N];
void merge(int m[],int l,int mid,int r)
{
int k=l,i=l,j=mid+1;
while(i<=mid && j<=r)
{
if(m[i]<=m[j])
b[k++]=m[i++];
else
b[k++]=m[j++];
}
while(i<=mid)
b[k++]=m[i++];
while(j<=r)
b[k++]=m[j++];
for(int i=l;i<=r;i++)
m[i]=b[i];
}
void msort(int m[],int l,int r)
{
if(l==r)
return;
int mid=(l+r)/2;
msort(m,l,mid);
msort(m,mid+1,r);
merge(m,l,mid,r);
}
int main()
{
// freopen("xxx.in","r",stdin);
// freopen("yyy.out","w",stdout);
int n;
cin >> n;
for(int i=0;i<n;i++)
cin >> a[i];
msort(a,0,n-1);
for(int i=0;i<n;i++)
cout << a[i] << " ";
// fclose(stdin);
// fclose(stdout);
return 0;
}