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

左と右は関数です。あなたのコードはそれらを配列であるかのように使用しています。関数を呼び出すには、[]ではなく()を使用します。

于 2013-03-17T22:55:28.457 に答える
1

あなたが必要Left(i)としRight(i)、ではなくLeft[i]Right[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

C ++で関数呼び出しを抑制するために()を使用しているため、これはエラーです。あなたは変更する必要があります

int l = Left[i];

の中へ

int l = Left(i);
于 2013-03-17T23:00:45.400 に答える
0

ヒープソートの可能な限り最良の実装を確認したい場合は、Linuxカーネルを調べてください。

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

完璧を吸収するために、Cを初めて使用したときにそれを見つめていたことを覚えています。

于 2013-03-17T23:22:42.503 に答える