首页 新闻 会员 周边

归并排序中的归并函数在调用时出错

0
悬赏园豆:10 [已关闭问题] 关闭于 2018-09-27 21:36

今天尝试根据书上给的归并排序算法伪代码编写一下程序进行测试。源代码如下:

include <stdio.h>

include <stdlib.h>

include <limits.h>

struct Array
{
int *arr;
int len;
};

struct Array A;

void Initial(struct Array & A) //这里的形参一定要申明为引用,否则函数内部对A.len的改动实际会不奏效
{
int n,i;
printf("insert an integer n:");
scanf("%d",&n);
A.len=n;
A.arr=(int )malloc(sizeof(int)A.len);
printf("insert n number of integers:");
for(i=0; i<A.len; i++)
{
scanf("%d",&A.arr[i]);
}
}

void Show(struct Array A)
{
int i;
printf("the array is:");
for(i=0; i<A.len; i++)
{
printf("%d ",A.arr[i]);
}
printf("\n");
}

void Merge(int arr[],int p,int q,int r)
{
int n1=q-p+1,n2=r-q;
int L[n1+1],R[n2+1];
int i,j,k;
for(i=0; i<n1; i++)
{
L[i]=arr[p+i];
}
for(j=0; j<n2; j++)
{
R[j]=arr[q+1+j];
}
i=0;
j=0;
L[n1]=INT_MAX;
L[n2]=INT_MAX;
for(k=p; k<=r; k++)
{
if(L[i]<R[j])
{
arr[k]=L[i];
i++;
}
else
{
arr[k]=R[j];
j++;
}
}
}

void Merge_Sort(int arr[],int p,int r)
{
if(p<r)
{
int q=(r-p)/2;
Merge_Sort(arr,p,q);
Merge_Sort(arr,q+1,r);
Merge(arr,p,q,r);
return;
}
else
return;
}

int main()
{
Initial(A);
Merge_Sort(A.arr,0,A.len-1);
Show(A);
return 0;
}

首先编译正确,但运行没有输出。运行单步调试后发现在Merge_Sort函数在第一次调用Merge函数之前程序都是正常的,但调用Merge函数后单步调试箭头直接指向了Merge函数体内的尾部,然后程序自动终止了。检查了很久的代码就得没有问题,算法也是根据书上来的,同时自己验证过。不知道错误是不是出现在函数调用上?

从今往后^-^的主页 从今往后^-^ | 菜鸟二级 | 园豆:208
提问于:2018-09-27 19:31
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册