[英]Can't return the correct int in C
我正在使用此功能(快速排序算法),即时通讯也试图获得总的重定位。 为了收集尽可能多的统计信息,我必须使用for循环多次执行该函数,因此在算法结束后,必须将静态变量复制到非静态变量并将其返回后,使静态变量等于零。 相反,我总是得到0的回报。 请帮助我也不要获得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()
,并在最内部的调用中将staticrelocations = 0
设置staticrelocations = 0
然后再返回其前一个值。 但是,在外部quicksort()
,您将忽略内部quicksort
的返回值。 外部staticrelocations
返回归零的staticrelocations
。 相反,您应该这样:
int quicksort()
{
int relocs = 0;
/* function logic */
if (/*did a new relocation*/)
relocs++;
relocs += quicksort(); //inner quicksort recursively
return relocs;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.