#2
word1232019-03-18 21:55
#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); //整个数组分为前后两部分 //递归对两个部分排序 //合并:将数组前后两部分分到临时数组L和R中 // 比较L和R中的数字,较小的放回原数组 // 若其中一个数组已遍历完,直接放另一个数组的数字 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)); // //数组中的元素转移; 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(k>=(mind-first+1)){ A[i]=*(R+n); n++; }else if(n>=(end-mind)){ A[i]=*(L+k); k++; }else if(k<(mind-first+1) && n<(end-mind)) { if(*(L+k)<=*(R+n)) { A[i]=*(L+k); k++; } else { A[i]=*(R+n); // n++; } } } //释放空间 free(L);free(R); } |
程序代码:
#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);
}
#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);
}
但问题不知道 :哪里出错了