#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[100],ans[100];
void merge_sort(int x,int y)
{
if(y-x>1) {
int mid=x+(y-x)/2;
merge_sort(x,mid);
merge_sort(mid,y);
int i=x,j=mid;
int n=mid,m=y,k=0;
while(i<n&&j<m) {
if(a[i]<a[j]) ans[k++]=a[i++];
else ans[k++]=a[j++];
}
while(i<n) ans[k++]=a[i++];
while(j<m) ans[k++]=a[j++];
for(i=0;i<k;i++) a[x+i]=ans[i];
}
}
int main()
{
int i,j,n;
scanf("%d",&n);
for(i=0;i<n;i++) cin>>a[i];
merge_sort(0,n);
for(i=0;i<n;i++) cout<<a[i]<<" ";
cout<<endl;
}
归并排序_分治算法 (白书P226)
最新推荐文章于 2022-04-27 23:08:13 发布