您的位置:首页 > 其它

归并排序(递归与分治)

2015-08-05 17:24 232 查看
#include <stdio.h>
#include <stdlib.h>
void mer (int a[],int l,int m,int r )    //合并函数
{
int i,j,k;
int n1=m-l+1;
int n2=r-m;
int *f,*b;
f=(int *) malloc (n1*sizeof (int));
b=(int *) malloc (n2*sizeof (int));
for (i=0;i<n1;i++)
f[i]=a[l+i];
for (i=0;i<n2;i++)
b[i]=a[m+i+1];
i=0;j=0;k=l;
while (i<n1 && j<n2)      // 比较完全拆分后数的大小
{
if (f[i]<b[j])
a[k++]=f[i++];
else
a[k++]=b[j++];
}
while (i<n1)
a[k++]=f[i++];
while (j<n2)
a[k++]=b[j++];
}
void sort (int a[],int l,int r)    //将数组拆分(递归)
{
int m;
m=(l+r)/2;
if (l<r)
{
sort (a,l,m);
sort (a,m+1,r);
mer (a,l,m,r);
}
}
int main ()
{
int a[100];
int n,i;
scanf ("%d",&n);
for (i=0;i<n;i++)
scanf ("%d",&a[i]);
sort (a,0,n-1);
for (i=0;i<n;i++)
printf ("%d ",a[i]);
printf ("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: