#include<cstdio>
#include<algorithm>
using namespace std;
int min(int a,int b){
if(a<=b) return a;
else return b;
}
void merge(int a[],int L1,int R1,int L2,int R2){
int i=L1,j=L2,index=0;
int temp[R2+R1-L1-L2+2];
while(i<=R1&&j<=R2){
if(a[i]<=a[j]){
temp[index++]=a[i++];
}else{
temp[index++]=a[j++];
}
}
while(i<=R1) temp[index++]=a[i++];
while(j<=R2) temp[index++]=a[j++];
for(i=0;i<index;i++){
a[L1+i]=temp[i++];
}
}
/*
void mergesort(int a[],int n){
for(int step=2;step/2<=n;step*=2){
for(int i=0;i<=n;i+=step){
sort(a+i,a+min(i+step-1,n+1));
}
}
}
*/
void mergesort(int a[],int n){
for(int step=2;step/2<=n;step*=2){
for(int i=0;i<n;i+=step){
int mid=i+step/2-1;
if(mid+1<n){
merge(a,i,mid,mid+1,min(i+step-1,n+1));
}
}
}
}
int main(){
int n;
scanf("%d",&n);
int a[n],i;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
mergesort(a,n);
for(i=0;i<n;i++){
printf("%d",a[i]);
}
return 0;
}
4_6_2归并排序非递归141
最新推荐文章于 2021-06-14 16:34:48 发布