令和5年度 ITパスポート 問60(テクノロジ)
出典:令和5年度 ITパスポート試験 公開問題 問60(独立行政法人情報処理推進機構(IPA))
手続printArrayは,配列integerArrayの要素を並べ替えて出力する。手続printArrayを呼び出したときの出力はどれか。ここで,配列の要素番号は1から始まる。
〔プログラム〕
○printArray()
整数型: n, m
整数型の配列: integerArray ← {2, 4, 1, 3}
for (n を 1 から (integerArray の要素数 - 1) まで 1 ずつ増やす)
for (m を 1 から (integerArray の要素数 - n) まで 1 ずつ増やす)
if (integerArray[m] > integerArray[m + 1])
integerArray[m] と integerArray[m + 1] の値を入れ替える
endif
endfor
endfor
integerArray の全ての要素 を先頭から順にコンマ区切りで出力する
- ア1,2,3,4
- イ1,3,2,4
- ウ3,1,4,2
- エ4,3,2,1
正解と解説を見る
正解:ア
【プログラムの動き】
手続printArrayは、隣り合う要素を比べて、前の方が大きければ入れ替える、という操作を繰り返す並べ替え(バブルソート)です。外側のループが1回終わるごとに、残りの中で最も大きい値が後ろに確定していきます。最終的に、配列は小さい順(昇順)に並びます。
【トレース】
最初の配列は {2, 4, 1, 3} です。要素数は4です。
・n = 1(mは1〜3):2と4は入れ替えない → 4と1を入れ替えて {2, 1, 4, 3} → 4と3を入れ替えて {2, 1, 3, 4}
・n = 2(mは1〜2):2と1を入れ替えて {1, 2, 3, 4} → 2と3は入れ替えない
・n = 3(mは1):1と2は入れ替えない
出力は 1,2,3,4 です。
【選択肢の検討】
イ:1,3,2,4 は、どの時点の配列の状態とも一致しません。
エ:4,3,2,1 は大きい順(降順)で、前の方が大きいときに入れ替えるこのプログラムとは逆の並びです。
よって、正解は選択肢アです。