Я выполняю сортировку кучи для назначения. Мы должны сделать это так же, как она делала в классе со своим псевдокодом, иначе мы не получим кредит.
В моей функции 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);
}
Оставил & Право это функции; Ваш код использует их, как если бы они были массивами. Для вызова функции используйте (), а не [].
Тебе нужно Left(i)
а также Right(i)
не Left[i]
а также Right[i]
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
это ошибка, потому что мы используем (), чтобы скрыть вызов функции в C ++.
ты должен измениться
int l = Left[i];
в
int l = Left(i);
Если вы хотите увидеть наилучшую реализацию heapsort, загляните в ядро Linux.
http://lxr.free-electrons.com/source/lib/sort.c
Я помню, как смотрел на это, когда я был новичком в Си, чтобы я мог впитывать совершенство.