私は最大ヒープを作成しようとしていますが、ロジックが単純です。私は、私は木が最大ヒープの配列表現
90 36 17 25 26 7 1 2 3 19
ように見えるshoudその配列表現が90 36 17 25 26 7 1 2 3 19
する必要があり、まだコードの出力は
2 7 26 25 19 17 1 90 3 36
を使用しています
void maxHeapify(int i , int *a , int n){
int largest = i;
int left = (i * 2) + 1;
int right = (i * 2) + 2;
if(left < n && a[ largest] < a[ left ])
largest = left;
if(right < n && a[ largest ] < a[right])
largest = right;
if(largest != i){
swap(a[i], a[largest]);
maxHeapify(largest , a, n);
}
}
int main(){
int n;
int * a;
cout << "Number of elements : ";
cin >> n ;
a = new int[n];
for(int i = 0; i < n ; i++){
cin >> a[i];
}
for(int i = n/2 -1 ; i >= 0 ; i--){
maxHeapify(i , a, n);
}
for(int i = 0; i < n ; i++){
cout << a[i] << " ";
}
return 0;
}
を使用して、それを実装してみました
90 36 26 25 19 17 1 7 3 2
私はそれを見て、多くのチュートリアルで多くの同じコードを見つけました。どのように出力がツリーの配列で表されていないのですか?私はそれを誤解しましたか?
ありがとうございました
今までにデバッガを使用していない場合は、デバッガの使用方法を学ぶのに最適な時期です。デバッガを使用すると、変数を監視してその値を調べながら、コードを1行ずつ進めることができます。 –
['std :: make_heap'](http://en.cppreference.com/w/cpp/algorithm/make_heap)を使用してください。 –