合并排序(递归法)5

/*arry[100]
mergesort(s,e){
s1=s;
s2=(s+e)/2+1;
e1=s2-1;
e2=e;
if(s<e){
mergesort(s1,e2);
mergesort(s2,e2);
merge(s1,s2,e21,e2);
}
else return ;
递归错误,把函数入口数据输出*/
#include<stdio.h>
int arry[100],n;
int temp[55];
void merge(int s1,int s2,int e1,int e2)
{
int i=s1,j=s2,k=0;
while(i<=e1&&j<=e2){
if(arry[i]<=arry[j]){
temp[k++]=arry[i];
i++;
}
else {
temp[k++]=arry[j];
j++;
}
}
if(i>=e1+1&&j<=e2){
while(j<=e2)
temp[k++]=arry[j++];
}
else if(j>=e2+1&&i<=e1){
while(i<=e2)
temp[k++]=arry[i++];
}
i=0;
j=s1;
while(i<k-1){
arry[j++]=temp[i++];
}

}
void mergesort(int s,int e)
{

int s1,s2,e1,e2;
if(s<e){
s1=s;
e1=(s+e)/2;
s2=e1+1;
e2=e;
mergesort(s1,e1);//putchar('s');
mergesort(s2,e2);
merge(s1,s2,e1,e2);

//putchar('v');
}
//else {putchar('T');return ;}
}
main()
{
int i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&arry[i]);
mergesort(0,n-1);
for(i=0;i<n;i++)
printf("%d ",arry[i]);
return 0;
}

你可能感兴趣的:(排序)