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