2013-03-17 183 views
0

我正在爲作業實現堆排序。我們必須按照她在課堂上使用她的僞代碼的方式來做,否則我們不會得到信任。堆排序錯誤:圍繞變量堆棧損壞?

即時得到一個運行時錯誤:圍繞變量「heapArray」 堆棧已損壞。我和調試器一起玩,仍然無法弄清楚是什麼導致了錯誤。我很確定它與HeapSort()函數中的For循環有關。誰能幫忙?

void HeapSort(int heapArray[]) 
{ 
    int heap_size = SIZE; 
    int n = SIZE; 
    int temp; 

    Build_Max_Heap(heapArray);//function not implemented, only declared for compile 

    for(int i = n; i >=2; i--) //***I think error coming from something in here 
    { 
     temp = heapArray[1]; 
     heapArray[1] = heapArray[i]; 
     heapArray[i] = temp; 

     heap_size = heap_size-1; 
     Max_Heapify(heapArray,1);//function not implemented, only declared for compile 
    } 

    return; 
} 

int main() 
{ 
    int heapArray[SIZE] = { 5 ,99, 32, 4, 1, 12, 15 , 8, 13, 55 }; 
    HeapSort(heapArray); 


    cout << endl; 
    return 0; 
} 

回答

0

錯誤是:

for(int i = n; i >=2; i--) 

你必須從n-1開始,數組索引從0正確的方式開始要做的應該是

for(int i = n -1; i >=1; --i) 

如果從n開始,數組索引超出界限錯誤。很可能您書中的僞代碼(爲了方便起見)使用從1到n的數組索引,但是在使用C++編寫的實際程序中,我們應該從0開始到n-1

0

你正在編寫出界在

for(int i = n; i >=2; i--) 
{ 
temp = heapArray[1]; 
heapArray[1] = heapArray[i]; //THIS IS WRONG 
heapArray[i] = temp;   // 

在C數組從0到n-1。 heapArray聲明爲SIZE大小。

應該更像:

for(int i = n - 1; i >=2; i--) //Now you start from n-1 
{ 
temp = heapArray[1]; 
heapArray[1] = heapArray[i]; 
heapArray[i] = temp;