#include<stdio.h>
#include<stdlib.h>
merge(int *ntest,int p,int q,int r)
{
int n1=q-p+1;
int n2=r-q;
int m=p;
int *left=malloc(sizeof(int)*(n1));
int *right=malloc(sizeof(int)*(n2));
int i,j;
for(i=0;i<n1;i++)
left[i]=ntest[p+i];
for(j=0;j<n2;j++)
right[j]=ntest[q+j+1];
i=0,j=0;
for(m;m<=r;m++)
{
if(left[i]<=right[j])
{
ntest[m]=left[i];
if(i++==n1-1){
m++;
for(m;m<=r;m++)
ntest[m]=right[j++];
break;
}
}
else{
ntest[m]=right[j];
if(j++==n2-1){
m++;
for(m;m<=r;m++)
ntest[m]=left[i++];
break;
}
}
}
free(left);
free(right);
}
mergesort(int *ntest,int m,int n)
{
int p;
if(m<n)
{
p=(m+n)/2;
mergesort(ntest,m,p);
mergesort(ntest,p+1,n);
merge(ntest,m,p,n);
}
}
int main()
{
int i;
int a[8]={5,2,4,7,1,3,2,6};
mergesort(a,0,7);
for(i=0;i<8;i++)
printf("%d \n",a[i]);
return 0;
}
mergesort
最新推荐文章于 2021-04-12 13:24:46 发布