归并排序
#include<stdio.h>
#include<stdlib.h>
\\将两个有序数组合并
int m1(int a[],int f,int e,int m)
{
int *t=(int*)malloc((e-f+1)*sizeof(int));
int k=0,i,j;
i=f;
j=m+1;
while(i<=m&&j<=e)
{
if(a[i]<=a[j])
t[k++]=a[i++];
else
t[k++]=a[j++];
}
while(i<=m)
t[k++]=a[i++];
while(j<=e)
t[k++]=a[j++];
for(i=0;i<k;i++)
a[f+i]=t[i];
free(t);
}
int m2(int a[],int f,int e)
{
int m;
m=(e+f)/2;
if(f<e)
{
m2(a,f,m);\\作排序
m2(a,m+1,e);\\右排序
m1(a,f,e,m);\\递归合并
}
}
\\排序10个输入的数组
int main()
{
int a[10],i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
m2(a,0,9);
for(i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}