#include <stdio.h>
void merge(int sr[],int tr[],int i,int m,int t){
int j,k,l;
for(k=i,j=m+1;i<=m && j<=t;k++){
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];
}
}
if(j<=t){
for(l=0;l<=t-j;l++){
tr[k+l]=sr[j+l];
}
}
}
void merpass(int sr[],int tr[],int s,int t){
int i=1;
int j;
while(i<=t-2*s+1){
merge(sr,tr,i,i+s-1,i+2*s-1);
i=i+2*s;
}
if(i<t-s+1)
merge(sr,tr,i,i+s-1,t);
else{
for(j=i;j<=t;j++){
tr[j]=sr[j];
}
}
}
void mersort(int sr[],int tr[],int length){
int k=1;
while(k<length){
merpass(sr,tr,k,length);
k=2*k;
merpass(tr,sr,k,length);
k=2*k;
}
}
int main(){
int a[100],b[100],i,m;
scanf("%d",&m);
for(i=1;i<=m;i++){
scanf("%d",&a[i]);
}
mersort(a,b,m);
for(i=1;i<=m;i++){
printf("%d ",a[i]);
}
return 0;
}
merging sort(迭代取代递归)
最新推荐文章于 2022-08-09 19:40:57 发布