問題
問67 手続 sort は,要素数が2以上の整数型の配列を引数 numberArray で受け取り,その要素を昇順に並べ替えた結果を出力する。手続 sort の動作確認のために,処理の途中で j の値と workArray の全ての要素を出力する。配列 numberArray を{3, 5, 1, 2, 4}とし,手続 sort を sort(numberArray)として呼び出したとき,j の値が3と出力された直後の workArray の全ての要素の出力はどれか。ここで,配列の要素番号は1から始まる。
選択肢
- ア1, 2, 3, 4, 5
- イ1, 2, 3, 5, 4
- ウ4, 5, 3, 2, 1
- エ5, 4, 3, 2, 1
解説
正解:イ
概要
この問題は,擬似言語で記述された選択ソートのプログラムの動作を問うものです。配列の並べ替え処理を手順ごとにトレースする力が問われます。
正解の理由
選択ソートでは,外側のループの繰り返し変数jの値が示す位置に,残りの要素の中の最小値を選んで移動させます。
・j=1のとき: 全体の最小値1を先頭(1番目)に移動 → {1, 5, 3, 2, 4}
・j=2のとき: 残り(2〜5番目)の最小値2を2番目に移動 → {1, 2, 3, 5, 4}
・j=3のとき: 残り(3〜5番目)の最小値3を3番目に移動 → {1, 2, 3, 5, 4}
j=3の直後のworkArrayは{1, 2, 3, 5, 4}となります。イが正解です。
各選択肢の解説
ア(×): 1, 2, 3, 4, 5はソート完了後の状態であり,j=3の直後ではありません。
イ(〇): j=3の直後の状態は1, 2, 3, 5, 4です。3番目まで確定し,4番目と5番目がまだ入れ替わっていません。
ウ(×): 降順の途中の状態であり,このアルゴリズムは昇順ソートです。
エ(×): 逆順の配列であり,選択ソートの中間状態ではありません。
ポイント
選択ソートはj=kのときk番目に確定された最小値が入り,k+1番目以降の要素はまだ並べ替えが完了していません。j=3の直後は3番目(値3)まで確定しており,4番目以降は元の順序(5, 4)のままであることがポイントです。