Я выполняю сортировку кучи для назначения. Мы должны сделать это так же, как она делала в классе со своим псевдокодом, иначе мы не получим кредит.
Я получаю ошибку во время выполнения: Стек вокруг переменной ‘heapArray’ поврежден. Я играл с отладчиком, и все еще не мог понять, что является причиной ошибки. Я почти уверен, что это как-то связано с моим циклом For в функции HeapSort (). Кто-нибудь может помочь?
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;
}
Ошибка:
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
вместо.
Вы пишете вне границ в
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;