无法在C中返回正确的int

时间:2015-03-28 22:42:30

标签: c quicksort

我正在使用此功能(快速排序算法)和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;
}

1 个答案:

答案 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;
}