平成30年春期試験問題  午後問8

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
ITビギナーさん  
(No.1)
[プログラム 1 ]:makeHeapの引数data[]に図1と同じ数を 5,10,15,20,30,45,60の順で格納し、makeHeapを実行しても図2 heap[] 60,30,45,15,5,10,20にならず、60,20,45,5,15,10,30になってしまいます。
トレースがどこで間違えてるかわかりません。
  どなたか教えて頂けないでしょうか。宜しくお願いします。
2020.03.24 20:35
メタルさん 
FE ブロンズマイスター
(No.2)
この二つの関数の処理を勘違いして左右逆に計算してませんか?
整数型:lchild(整数型: i )
整数型:rchild(整数型: i )

配列をヒープの関係で見てみると、左右逆に節や葉が出来てますので、取り違えに気をつけてやってみてください。
2020.03.24 20:56
メタルさん 
FE ブロンズマイスター
(No.3)
ごめんなさい、勘違いです。
前の投稿は、無視して下さい。
2020.03.24 21:03
QMさん 
FE ゴールドマイスター
(No.4)
ヒープの条件は満たしているので、合ってるんじゃないですか?
結果が違うのは、たぶん初期値の並びが違うからでしょう。
トレースはしてみてませんけど・・・
2020.03.24 21:18
ITビギナーさん  
(No.5)
QMさん、ありがとうございます。
親の値が左右の子の値より大きければ問題ないんですね。
2020.03.24 21:23
残念・・・さん 
(No.6)
そうですね。根が最大で、親が左右の子よりデカきゃ大丈夫ですね。なんも問題なし。
その状態でheapSortを実行してもちゃんと昇順にソートできますね。
2020.03.24 23:05

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop