#include
void Merge(int c[],int d[],int l,int m,int r)
{//合并c[l:m]和c[m+1:r]到d[l:r]
int i=l,
j=m+1,
k=l;
while((i<=m)&&(j<=r))
if(c[i]<=c[j]) d[k++]=c[i++];
else d[k++]=c[j++];
if(i>m)for(int q=j;q<=r;q++)
d[k++]=c[q];
else for(int q=i;q<=m;q++)
d[k++]=c[q];
}
void MergePass(int x[],int y[],int s,int n)
{//合并大小为s的相邻子数组
int i=0;
while(i<=n-2*s){
//合并大小为s的相邻2段子数组
Merge(x,y,i,i+s-1,i+2*s-1);
i=i+2*s;
}
//剩余的元素个数少于2s
if(i+s else for(int j=i;j<=n-1;j++) y[j]=x[j]; } void MergeSort(int a[],int n) { int *b=new int []; int s=1; while(s MergePass(a,b,s,n);//合并到数组b s+=s; MergePass(b,a,s,n);//合并到数组a s+=s; } } int main() { int t[20]; cout<<”请输入数组:\n”; cout<<”输入0结束\n”; int p=0; int g=-1; while(g!=0){ cin>>g; if(g!=0) { t[p]=g; p++; //g++; } } /*for(int g=0;g<5;g++) cin>>t[g];*/ MergeSort(t,p); for(int i=0;i { cout< } return 0; }