K.Maebashi's BBS 削除ページ

以下の投稿を削除します。

[909] Re:C言語体当たり学習
返信
投稿者:(ぱ)こと管理人
2007/02/20 02:13:25

>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行目のスワップで、必ず同じ変数をひっくり返します。 これはバグとは思いませんが、補足かなにかで書いておいた方がよいかもしれませんね(今日は時間が時間なのでアレですが)。 ご意見ありがとうございました。
パスワード:

管理者削除