【发布时间】:2015-03-27 04:16:22
【问题描述】:
我是编程/C 方面的新手。 我将合并排序算法理解为一种算法,但是在编程方面,似乎我做错了什么。 有人可以帮忙吗?
谢谢。
这是我的代码:
merge(int A[],int p,int q,int r);
part(int A[],int p,int r);
int main()
{
int A [6]={10,5,4,0,11,7}, n,y,z;
y=1; z=sizeof(A)/sizeof(int);
part(A,y,z);
for(n=0;n<z;n++)
printf("%d\n", A[n]);
return 0;
}
part(int A[],int p,int r)
{
if (p<r)
{
int q=(p+r)/2;
part(A,p,q);
part(A,q+1,r);
merge(A,p,q,r);
}
}
merge(int A[],int p,int q,int r)
{
int n1=q-r+1,n2=r-q,L[n1+1],R[n2+1],i,j,k;
L[n1+1]=100000;
R[n2+1]=100000;
for (i=0;i<n1;i++)
L[i]=A[p-1+i];
for (j=0;j<n2;j++)
R[j]=A[q+j];
i=0;j=0;
for (k=0;k<r;k++)
if(L[i]<=R[j])
{
A[k]=L[i];
i++;
}
else
{
A[k]=R[j];
j++;
}
}
【问题讨论】:
-
it appears that I am doing something wrong.发生了什么让你这么认为? -
你是怎么得出
I am doing something wrong这个结论的? -
您可以从指定函数的返回类型开始。
-
首先:数组,在 C 中,索引从
0到n - 1。定义为int L[n1 + 1];的数组具有 (n1 + 1) 元素,其索引为0到n1。元素L[n1 + 1]不存在......但您尝试写入它。 -
对于所有讽刺的 cmets
what happens that makes you think so?,How you came to this conclusion- 如果 OP 知道这个问题的答案,就永远不会问这个问题。 OP 试图解决一个问题并发布了有问题的工作。如果你不能回答问题,那么至少不要降低 SO 的标准。我希望 SO 在这里作为有经验的用户回答此类问题。反对者也是如此。我们确切地知道合并排序应该做什么。