不能 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;
}