#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #define maxn 1010 using namespace std; void merge(int sr[],int tr[],int i,int m,int n) { /* 将有序的sr[i..m]和sr[m+1..n]归并为有序的tr[i..n] */ int j,k,l; for(j=m+1,k=i;i<=m&&j<=n;k++)/* 将sr中记录由小到大地并入tr */ { if(sr[i]<sr[j]) tr[k]=sr[i++]; else tr[k]=sr[j++]; } if(i<=m) { for(l=0;l<=m-i;l++) tr[k+l]=sr[i+l];/* 将剩余的sr[i..m]复制到tr */ } if(j<=n) { for(l=0;l<=n-j;l++) tr[k+l]=sr[j+l];/* 将剩余的sr[j..n]复制到tr */ } } void msort(int sr[],int tr1[],int s,int t) {/* 将sr[s..t]归并排序为tr1[s..t] */ int m; int tr2[maxn]; if(s==t) tr1[s]=sr[s]; else { m = (s+t)/2;/* 将sr[s..t]平分为sr[s..m]和sr[m+1..t] */ msort(sr,tr2,s,m);/* 递归地将sr[s..m]归并为有序的tr2[s..m] */ msort(sr,tr2,m+1,t);/* 递归地将sr[m+1..t]归并为有序的tr2[m+1..t] */ merge(tr2,tr1,s,m,t);/* 将tr2[s..m]和tr2[m+1..t]归并到tr1[s..t] */ } } int main() { int n; cin >> n; int a[n]; memset(a,0,sizeof(a)); for(int i=1;i<=n;i++) cin >> a[i]; msort(a,a,1,n); for(int i=1;i<=n;i++) cout << a[i] << endl; return 0; } /*过程图见大话数据结构408-412*/