Ошибка сортировки кучи: выражение должно быть указателем на полный тип объекта?

Я выполняю сортировку кучи для назначения. Мы должны сделать это так же, как она делала в классе со своим псевдокодом, иначе мы не получим кредит.

В моей функции Max_Heapify я получаю сообщение об ошибке при вызове функций Left () и Right (), которые говорят:выражение должно быть указателем на полный тип объектаMsgstr «Я иду прямо из 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);
}

0

Решение

Оставил & Право это функции; Ваш код использует их, как если бы они были массивами. Для вызова функции используйте (), а не [].

2

Другие решения

Тебе нужно Left(i) а также Right(i)не Left[i] а также Right[i]

1

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

Если вы хотите увидеть наилучшую реализацию heapsort, загляните в ядро ​​Linux.

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

Я помню, как смотрел на это, когда я был новичком в Си, чтобы я мог впитывать совершенство.

0
По вопросам рекламы [email protected]