不能 return C 中的正确 int
Can't return the correct int in C
我正在使用这个函数(快速排序算法)并且我
也试图获得总搬迁。为了收集尽可能多的统计信息,我必须使用 for 循环多次执行函数,所以在算法结束后,我必须在将静态变量复制到非静态变量后使静态变量等于零,并且 return 它。相反,我总是得到 0 return。
请帮助我也不要得到 0 分:P 谢谢
int quicksort(int left, int right, int *p)
{
static int staticrelocations=0;
int i,j,mid,x,temp,relocations;
if(left<right)
{
i=left;
j=right;
mid=(left+right)/2;
x=p[mid];
while(i<j)
{
while(p[i]<x)
i++;
while(p[j]>x)
j--;
if(i<j)
{
if(p[i]==p[j])
{
if(i<mid)
i++;
if(j>mid)
j--;
}
else
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
staticrelocations++;
}
}
}
quicksort(left,j-1,p);
quicksort(j+1,right,p);
}
relocations=staticrelocations;
staticrelocations=0;
return relocations;
}
您递归到 quicksort()
,并且在最内层的调用中,您在 return 之前设置了 staticrelocations = 0
。但是,在外部 quicksort()
中,您 忽略了 内部 quicksort
的 return 值。外部快速排序 return 归零 staticrelocations
。相反,你应该这样做:
int quicksort()
{
int relocs = 0;
/* function logic */
if (/*did a new relocation*/)
relocs++;
relocs += quicksort(); //inner quicksort recursively
return relocs;
}
我正在使用这个函数(快速排序算法)并且我 也试图获得总搬迁。为了收集尽可能多的统计信息,我必须使用 for 循环多次执行函数,所以在算法结束后,我必须在将静态变量复制到非静态变量后使静态变量等于零,并且 return 它。相反,我总是得到 0 return。 请帮助我也不要得到 0 分:P 谢谢
int quicksort(int left, int right, int *p)
{
static int staticrelocations=0;
int i,j,mid,x,temp,relocations;
if(left<right)
{
i=left;
j=right;
mid=(left+right)/2;
x=p[mid];
while(i<j)
{
while(p[i]<x)
i++;
while(p[j]>x)
j--;
if(i<j)
{
if(p[i]==p[j])
{
if(i<mid)
i++;
if(j>mid)
j--;
}
else
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
staticrelocations++;
}
}
}
quicksort(left,j-1,p);
quicksort(j+1,right,p);
}
relocations=staticrelocations;
staticrelocations=0;
return relocations;
}
您递归到 quicksort()
,并且在最内层的调用中,您在 return 之前设置了 staticrelocations = 0
。但是,在外部 quicksort()
中,您 忽略了 内部 quicksort
的 return 值。外部快速排序 return 归零 staticrelocations
。相反,你应该这样做:
int quicksort()
{
int relocs = 0;
/* function logic */
if (/*did a new relocation*/)
relocs++;
relocs += quicksort(); //inner quicksort recursively
return relocs;
}