簡體   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