gpt4 book ai didi

在另一个函数中调用函数(但不是递归)

转载 作者:太空宇宙 更新时间:2023-11-04 01:50:31 25 4
gpt4 key购买 nike

我已经用 C 编写了合并排序代码,但是当我在 mergesort() 中调用函数 merge() 时,编译器显示错误。有什么原因吗?我正在尝试编写合并排序算法我没有为该死的堆栈溢出情况编写更多详细信息。

            #include<stdio.h>
#include<stdlib.h>
int mergesort(int* A,int n)
{
if(n==1)
return 0;
int ln,rn;//to calculate length of left and right arrays
int *L,*R;//pointer to left and right arrays
L=(int*)malloc(ln*sizeof(int));
R=(int*)malloc(rn*sizeof(int));
ln=n/2;
rn=n-ln;
for(int i=0;i<ln;i++)
{
L[i]=A[i];
}
for(int i=0;i<rn;i++)
{
L[i]=A[i+rn];
}
mergesort(L,ln);
mergesort(R,rn);
merge(A,L,R,n,ln,rn);
return 0;
}
int merge(int*A,int*L,int*R,int n,int ln,int rn)
{
int i,j,k;//to access elements of A,L,R respectively
i=j=k=0;
while(j<ln&&k<rn)
{
if(L[j]<=R[k])
{
A[i]=L[j];
i++;
j++;
}
else
{
A[i]=L[k];
i++;
k++;
}
}
while(j<ln)//means R is fully copied to A,but not L
{
A[i]=L[j];
i++;
j++;
}
while(k<ln)//means L is fully copied to A,but not R
{
A[i]=L[k];
i++;
k++;
}
return 0;
}
int main()
{
int* A,i,n;
//scanf("array size: %d",&n);//dunno it's valid or not
scanf("%d",&n);
A=(int*)malloc(n*sizeof(int));
printf("\n");
for(i=0;i<n;i++)
{
scanf("%d",&A[i]);
}
mergesort(A,n);
for(i=0;i<n;i++)
{
printf("%d ",A[i]);
}
return 0;
}

enter image description here

最佳答案

merge 函数在 mergesort 的范围内仍然未知,因为它仅在文件中出现在它之后。

在文件的开头(包含之后)添加一个原型(prototype)(前向声明):

static int merge(int*A,int*L,int*R,int n,int ln,int rn);

关于在另一个函数中调用函数(但不是递归),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44118315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com