0

我正在为一项任务实施堆排序。我们必须像她在课堂上用她的伪代码那样做,否则我们不会得到荣誉。

在我的 Max_Heapify 函数中,当我调用 Left() 和 Right() 函数时出现错误,即“表达式必须是指向完整对象类型的指针”。我直接离开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;
}

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

如果有帮助的话,这里是 Left() 和 Right() 函数

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

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

5 回答 5

2

Left & Right 是函数;您的代码正在使用它们,就好像它们是数组一样。要调用函数,请使用 (),而不是 []。

于 2013-03-17T22:55:28.457 回答
1

你需要Left(i)and Right(i),而不是Left[i]andRight[i]

于 2013-03-17T22:55:14.750 回答
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
于 2013-03-17T22:55:24.413 回答
0

如果您想查看堆排序的最佳实现,请查看 linux 内核。

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

我记得我刚接触 C 的时候就盯着它看,这样我就可以吸收完美。

于 2013-03-17T23:22:42.503 回答
0

这是一个错误,因为我们使用 () 来表达 C++ 中的函数调用。你必须改变

int l = Left[i];

进入

int l = Left(i);
于 2013-03-17T23:00:45.400 回答