#include<iostream>
#include<string.h>
#include<string>
using namespace std;
int n;
void merge(int a[],int p,int q,int r)//合并
{ int L[20]={0},R[20]={0};
int n1=q-p+1,n2=r-q;
for(int i=0;i<n1;++i)
L[i]=a[p+i];
for(int i=0;i<n2;++i)
R[i]=a[q+1+i];
int i=0,j=0,k;
for( k=p;k<=r;++k)
{ if(i>=n1||j>=n2) break;
if(L[i]<=R[j]) a[k]=L[i],i++;
else {a[k]=R[j];j++;}
}
if(i>=n1&&j>=n2) return;
if(i>=n1&&j<n2)
{
for(int s=k;s<=r;++s)
a[s]=R[j++];
}
if(i<n1&&j>=n2)
{ for(int s=k;s<=r;++s)
a[s]=L[i++];
}
}
void merge_sort(int a[],int p,int r)//分解
{ if(p<r)
{ int q=(p+r)/2;
merge_sort(a,p,q);
merge_sort(a,q+1,r);
merge(a,p,q,r);
}
}
int main()
{ while(1)
{ int a[20];
cin>>n;
for(int i=0;i<n;++i)
cin>>a[i];
merge_sort(a,0,n-1);
for(int i=0;i<n;++i)
cout<<a[i]<<" ";
cout<<endl;
} return 0;
}
分治排序
最新推荐文章于 2022-04-19 14:28:56 发布