問題
問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
[出典:ITパスポート試験 令和8年度 問67]
正解
正解は「イ」です。
解説
正解は「1, 2, 3, 5, 4」です。このプログラムは「選択ソート」というアルゴリズムで、配列の中から最小値を順番に見つけ出し、先頭から並べていく仕組みです。
初期状態が「3, 5, 1, 2, 4」の場合、まずj=1のループでは全体で最小の「1」を探して1番目の「3」と入れ替え、「1, 5, 3, 2, 4」になります。次にj=2のループでは、2番目以降の要素の中で最小の「2」を探し、2番目の「5」と入れ替えて「1, 2, 3, 5, 4」となります。
そして今回の問いであるj=3のループでは、3番目以降の要素(3, 5, 4)の中から最小の「3」を探します。3番目は最初から「3」なので、プログラム上の「入れ替え」処理を行っても見た目の変化は発生せず、配列の状態は「1, 2, 3, 5, 4」のまま維持されます。
例えるなら、バラバラに並んだ背番号の選手たちを、左端から順に一番低い番号の人を呼んで交代させていくような手順です。j=3が終わった時点では、左から3番目までの整列が完了しているため、この並び順になります。
ア(1, 2, 3, 4, 5):
これはソートが最後まで完全に完了した状態であり、j=4までの全ループが終了した後の出力結果です。
ウ(4, 5, 3, 2, 1):
配列の並びが元の順序ともソートの過程とも一致しておらず、プログラムの正しい動作結果ではありません。
エ(5, 4, 3, 2, 1):
これは大きい順(降順)に並べ替えた場合の結果であり、今回の「昇順(小さい順)」ソートの目的とは異なります。
難易度
難易度は「やや高め」と言えます。プログラムの流れを一つずつ手作業で書き出して追いかける「トレース」が必要なため、IT未経験の方にはループの回数や変数の変化を把握するのに少し時間がかかるかもしれません。しかし、代表的な「選択ソート」を題材にしているため、仕組みを丁寧に追っていけば確実に正解に辿り着ける、努力が反映されやすい問題です。
用語補足
配列:
複数のデータをひとまとめにして、番号で管理する箱の列のことです。「出席簿[5]」のように番号を指定して個別のデータを扱います。
引数(ひきすう):
プログラムの処理を動かす際に、外から渡す「材料」となるデータのことです。レシピに対する「食材」のような役割を果たします。
選択ソート:
バラバラのデータから最小値を繰り返し探し出し、順に並べる整列手法です。トランプを小さい順に並べる際、一番小さいカードを抜き出す操作に似ています。
トレース:
プログラムの動作を一行ずつ手作業で追いかけることです。迷路を指でなぞるように、変数の値がどう変わるかを確認する基本作業です。
対策
対策としては、擬似言語におけるループや値の入れ替え処理の記述に慣れておくことが不可欠です。試験本番では頭の中だけで考えず、問題用紙の余白に変数の推移をメモする習慣をつけましょう。また、選択ソートのような定番アルゴリズムは事前に仕組みを理解しておくと、コードを読み解くスピードが格段に上がり、ケアレスミスも防げるようになります。

