|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void merge(int *a,int p,int q,int r)
{
int n1,n2,i,k,j,*L,*R;
n1=q-p+1;
n2=r-q;
L=(int*)malloc(sizeof(int)*n1+1);
R=(int*)malloc(sizeof(int)*n2+1);
for(i=0;i<n1;i++)
L[i]=a[p+i];
for(j=0;j<n2;j++)
R[j]=a[q+j+1];
L[i+1]=99999;
R[j+1]=99999;
i=0,j=0;
for(k=p;k<=r;k++)
{
if(L[i]<=R[j]||R[j]==99999)
{
a[k]=L[i];
i++;
}
else
{
a[k]=R[j];j++;
}
}
}
void merge_sort(int *a,int p,int r)
{
int q;
if(p<r)
{
q=(p+r)/2;
merge_sort(a,p,q);
merge_sort(a,q+1,r);
}
merge(a,p,q,r);
}
void main()
{
int a[9]={1,45,78,23,45,65,12,12,23};
merge_sort(a,0,8);
int i=0;
for(i;i<9;i++)
printf("%d\t",a[i]);
}
|
|