2013-03-17 39 views
0

我正在實施堆排序以進行作業。我們必須按照她在課堂上使用她的僞代碼的方式來做,否則我們不會得到信任。堆排序錯誤:表達式必須是指向完整對象類型的指針?

在我Max_Heapify功能,即時得到一個錯誤,當我把我的左()和右()函數,即說:「表達式必須是一個指向一個完整的對象類型」。我直接關閉psedocode,所以我不知道是什麼原因導致這個錯誤,任何人都可以幫忙嗎?

void Max_Heapify(int heapArray[],int i) 
{ 
int n = SIZE; 
int largest = 0; 
int l = Left[i];//<--Error here on Left 
int r = Right[i];//<--Error here on Right 

if((l <= n) && (heapArray[l] > heapArray[i])) 
{ 
    largest = l; 
} 
else 
{ 
    largest = i; 
} 

if((r <= n) && (heapArray[r] > heapArray[largest])) 
{ 
    largest = r; 
} 

int temp; 
if(largest != i) 
{ 
    temp = heapArray[i]; 
    heapArray[i] = heapArray[largest]; 
    heapArray[largest] = temp; 

    Max_Heapify(heapArray,largest); 
} 

return; 
} 

............................................ ................................................

下面是左()和右()函數,如果它有助於在所有

int Left(int i) 
{ 
return (2*i); 
} 

int Right(int i) 
{ 
return ((2*i)+1); 
} 

回答

2

左&右是功能;你的代碼就像使用數組一樣使用它們。要調用函數,請使用(),而不是[]。

1

你需要Left(i)Right(i),不Left[i]Right[i]

0
int l = Left[i];//<--Error here on Left 
int r = Right[i];//<--Error here on Right 

int l = Left(i);//should be 
int r = Right(i);//should be 
0

這是一個錯誤,因爲我們使用()來保留C++中的函數調用。 你必須改變

int l = Left[i]; 

int l = Left(i); 
+0

@Mike Gordon您也可以刪除heapsort標記,因爲這不是算法相關的,您可以添加函數調用標記 – 4pie0 2013-03-17 23:03:15

0

如果你想看到的最好的實現的堆排序查找到Linux內核中。

http://lxr.free-electrons.com/source/lib/sort.c 

我記得當我剛到C時就盯着它看,以便吸收完美。

相關問題