繁体   English   中英

无法在C中返回正确的int

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM