合并排序

void Merge2(int *b,int *c,int *a,int Nb,int Nc)
{
int i=0,j=0,k=0;
while(i<Nb && j<Nc)
{
if (b[i]<c[j])
a[k++]=b[i++];
else
a[k++]=c[j++];
}
if (i==Nb)
{
while(j<Nc)
a[k++]=c[j++];
}
else{
while(i<Nb)
a[k++]=b[i++];
}
}
void MergeSort2(int *a ,int size)
{
if (size>1)
{
int mid=size/2;
int j=0,k=0;
int *b=(int *)malloc(sizeof(int)*mid);
int *c =(int *)malloc(sizeof(int)*(size-mid));
while(j<=mid-1)
{
b[j]=a[j];  //复制数组到b
c[k++]=a[j+mid];   //复制数组到c
j++;
}
if (j<=size-1)  //处理为复制完的元素
{
c[k]=a[j+mid];
}
MergeSort2(b,mid);
MergeSort2(c,size-mid);
Merge2(b,c,a,mid,size-mid);
free(b);
free(c);
}
}


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