输入
第一行为数列的总个数,第二行为待排序的数列
输出
排序后的数列
样例输入
8 10 4 6 3 8 2 5 7样例输出
2 3 4 5 6 7 8 10
代码:
#include<iostream>
#include<cstring>
int r[110];
int r1[110];
void Merge(int r[],int r1[],int s,int m,int t)
{
int i=s;
int j=m+1;
int k=s;
while(i<=m&&j<=t)
{
if(r[i]<=r[j])
r1[k++]=r[i++];
else
r1[k++]=r[j++];
}
if(i<=m)
{
while (i<=m)
r1[k++]=r[i++];
}
else
{
while(j<=t)
r1[k++]=r[j++];
}
}
void MergePass(int r[],int r1[],int n,int h)
{
int i=1;
while(i<=n-2*h+1)
{
Merge(r,r1,i,i+h-1,i+2*h-1);
i+=2*h;
}
if(i<n-h+1)
Merge(r,r1,i,i+h-1,n);
else for (int k=i; k<=n; k++)
r1[k]=r[k];
}
void MergeSort(int r[],int r1[],int n)
{
int h=1;
while(h<n)
{
MergePass(r,r1,n,h);
h=2*h;
MergePass(r1,r,n,h);
h=2*h;
}
}
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>r[i];
}
MergeSort(r,r1,n);
for(int i=1;i<=n;i++)
{
cout<<r[i]<<" ";
}
cout<<endl;
return 0;
}