科目A問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 |
『情報処理過去問.com』からiPhoneアプリがリリースされました!!
正解
- イ
解説
引数の配列をworkArrayにコピーし、外側のforでjを1から(要素数-1)まで動かし、内側のforでminIndex(最小要素の位置)を探してからworkArray[j]とworkArray[minIndex]を入れ替えます。各回の最後にjとworkArray全要素を出力します(要素番号は1始まりです)。
初期値:workArray = {3,5,1,2,4}
j=1:minIndex=1 → 比較の結果minIndex=3 → 1番目と3番目を交換 → {1,5,3,2,4} を出力
j=2:minIndex=2 → 比較の結果minIndex=4 → 2番目と4番目を交換 → {1,2,3,5,4} を出力
j=3:minIndex=3 → 以降の要素により小さい値なし → 3番目と3番目を交換(変化なし) → {1,2,3,5,4} を出力
よって、j=3 が出力された直後の workArray は「1,2,3,5,4」です。正解はイです。
初期値:workArray = {3,5,1,2,4}
j=1:minIndex=1 → 比較の結果minIndex=3 → 1番目と3番目を交換 → {1,5,3,2,4} を出力
j=2:minIndex=2 → 比較の結果minIndex=4 → 2番目と4番目を交換 → {1,2,3,5,4} を出力
j=3:minIndex=3 → 以降の要素により小さい値なし → 3番目と3番目を交換(変化なし) → {1,2,3,5,4} を出力
よって、j=3 が出力された直後の workArray は「1,2,3,5,4」です。正解はイです。
| ア. | 1,2,3,4,5 |
| 「1,2,3,4,5」ではありません。j=3 の直後は {1,2,3,5,4} のままです。 | |
| イ. | 1,2,3,5,4 |
| j=3 の処理後は交換が発生せず、直前の {1,2,3,5,4} がそのまま出力されます。正解です。 | |
| ウ. | 4,5,3,2,1 |
| 降順の並び「4,5,3,2,1」にはなりません。処理は未整列部分の最小を前方へ移す流れです。 | |
| エ. | 5,4,3,2,1 |
| 降順の並び「5,4,3,2,1」にはなりません。j=3 の直後は {1,2,3,5,4} です。 |