合并排序,我的思路很清晰
程序代码:#include"stdio.h"
#include"stdlib.h"
#define N 8
void Merge(int A[],int first,int mind,int end);
void Merge_sorted(int A[],int first,int end);
void main()
{
int A[N]={5,2,4,7,1,3,2,6};
int i;
Merge_sorted(A,0,N-1);
for(i=0;i<N;i++)
{
printf("\t%d",A[i]);
}
}
void Merge_sorted(int A[],int first,int end)
{
int mind;
if(first<end)
{
mind=(end-first)/2;
Merge_sorted(A,first,mind);
Merge_sorted(A,mind+1,end);
Merge(A,first,mind,end);
}
}
void Merge(int A[],int first,int mind,int end)
{
int i,k=0,n=0;
int *L,*R;
L=(int*)malloc(sizeof(int)*(mind-first+1));
R=(int*)malloc(sizeof(int)*(end-mind+1));
//数组中的元素转移;
for(i=first;i<mind;i++,k++)
{
*(L+k)=A[i];
}
k=0;
for(i=mind+1;i<end;i++,k++)
{
*(R+k)=A[i];
}
//合并两数组
k=0;
for(i=first;i<end;i++)
{
if(*(L+k)<=*(R+n))
{
A[i]=*(L+k);
k++;
}
else
{
A[i]=*(L+n);
n++;
}
}
//释放空间
free(L);free(R);
}
但问题不知道 :哪里出错了







