令和8年度 ITパスポート 問67(テクノロジ)
出典:令和8年度 ITパスポート試験 公開問題 問67(独立行政法人情報処理推進機構(IPA))
手続sortは,要素数が2以上の整数型の配列を引数numberArrayで受け取り,その要素を昇順に並べ替えた結果を出力する。手続sortの動作確認のために,処理の途中でjの値とworkArrayの全ての要素を出力する。配列numberArrayを{3,5,1,2,4}とし,手続sortをsort(numberArray)として呼び出したとき,jの値が3と出力された直後のworkArrayの全ての要素の出力はどれか。ここで,配列の要素番号は1から始まる。
〔プログラム〕
○sort(整数型の配列: numberArray)
整数型: minIndex, j, k
整数型の配列: workArray ← numberArray // 配列の複製を作る
for (j を 1 から (workArray の要素数 - 1) まで 1 ずつ増やす)
// j 番目から末尾までの要素の中で最も小さい値をもつ要素の要素番号を
// 一つ求める
minIndex ← j
for (k を (j + 1) から workArray の要素数 まで 1 ずつ増やす)
if (workArray[k] が workArray[minIndex] より小さい)
minIndex ← k
endif
endfor
workArray[j] と workArray[minIndex] の値を入れ替える
// 動作確認のために,j の値と workArray の全ての要素を出力する
j の値を出力する
workArray の全ての要素 を先頭から順にコンマ区切りで出力する
endfor
workArray の全ての要素 を先頭から順にコンマ区切りで出力する
- ア1,2,3,4,5
- イ1,2,3,5,4
- ウ4,5,3,2,1
- エ5,4,3,2,1
正解と解説を見る
正解:イ
【プログラムの動き】
手続sortは、選択ソートと呼ばれる並べ替えです。j番目から末尾までの中で最も小さい値を探し、それをj番目の要素と入れ替える、という操作を、jを1つずつ増やしながら繰り返します。入れ替えるたびに、jの値とworkArrayの全ての要素を出力します。
【トレース】
初めのworkArrayは {3, 5, 1, 2, 4} です。
・j = 1:1〜5番目(3, 5, 1, 2, 4)で最小は3番目の1。1番目と3番目を入れ替えて {1, 5, 3, 2, 4}
・j = 2:2〜5番目(5, 3, 2, 4)で最小は4番目の2。2番目と4番目を入れ替えて {1, 2, 3, 5, 4}
・j = 3:3〜5番目(3, 5, 4)で最小は3番目の3そのもの。自分自身との入れ替えなので変わらず {1, 2, 3, 5, 4}
jの値が3と出力された直後に出力されるのは、この時点のworkArrayの 1,2,3,5,4 です。
続くj = 4で5と4が入れ替わり、最終的に 1,2,3,4,5 になります。選択肢アは最後に出力される結果で、jが3のときの出力ではありません。よって、正解は選択肢イです。