我正在为作业实施堆排序。我们必须像她在课堂上用她的伪代码那样做,否则我们不会得到信任。
我收到运行时错误: 变量'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 :(得分: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;
答案 1 :(得分: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
。