K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>>p106のmy_sort5.cのソースコード36行目から始まる単純挿入ソートなのですが、 >>誤:for(sorted_count = 0; sorted_count < score_count; sorted_count++) { >>正:for(sorted_count = 0; sorted_count < score_count - 1; sorted_count++) { >>ではないでしょうか(判定条件の-1が抜けてる)。 >>誤りと思われるコードでは、配列の範囲外を(配列の要素数より1つ分多く) >>参照してしまうと思います。 > >my_sort5.cは挿入ソートではなく、単純選択ソートですね。 >ソースを確認しましたが、 > >(1)条件は「<」なのですから、sorted_countのループ内での最大値は > score_count-1です。よって、score[sorted_count]で参照する限り、 > 範囲外を参照することはありません。 >(2)38行目からのループは、 > for (i = sorted_count + 1; i < score_count; i++) { > で始まっています。iがsorted_count + 1から始まりますが、 > sorted_countが最大のとき、このループは1回も回らないので、score[i]で > 範囲外が参照されることもありません。 > >ただ、単純選択ソートの原理は「未ソート部分から最小値を探してきて左端に持ってくる」というものですから、最後にひとつ残された未ソートの要素は最大値に決まっているので、無駄といえば無駄ではあります。現状のソースだと43~45行目のスワップで、必ず同じ変数をひっくり返します。 > >これはバグとは思いませんが、補足かなにかで書いておいた方がよいかもしれませんね(今日は時間が時間なのでアレですが)。 > >ご意見ありがとうございました。
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!