合并排序,我的思路很清晰
程序代码:
#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); }
但问题不知道 :哪里出错了