我正在使用此功能(快速排序算法)和im 试图获得总重新安置。为了收集尽可能多的统计数据,我可以使用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;
}
答案 0 :(得分:2)
你递归到quicksort()
,并在最里面的调用中设置staticrelocations = 0
,然后返回它以前的值。但是,在外部quicksort()
中,您忽略内部quicksort
的返回值。外部快速排序返回归零staticrelocations
。相反,你应该这样:
int quicksort()
{
int relocs = 0;
/* function logic */
if (/*did a new relocation*/)
relocs++;
relocs += quicksort(); //inner quicksort recursively
return relocs;
}