令和8年度 ITパスポート試験 公開問題 問67

手続 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, 5, 4

このプログラムは、配列の要素を昇順(小さい順)に並べ替える 選択ソート を実行します。j 番目の要素から末尾までの要素のうち、最小値を持つ要素の要素番号を探し、j 番目の要素と入れ替える処理を繰り返します。

配列 workArray の初期状態は {3, 5, 1, 2, 4} であり、要素数は 55 です。順にトレースを行います。

1回目のループ (j = 1)

  • minIndex に 11(値は 33)が代入されます。
  • k を 22 から 55 まで増やして比較します。
    • k = 2: workArray[2] (55) < 33 → 偽
    • k = 3: workArray[3] (11) < 33 → 真(minIndex は 33 に更新されます)
    • k = 4: workArray[4] (22) < 11 → 偽
    • k = 5: workArray[5] (44) < 11 → 偽
  • ループ終了後、minIndex は 33 となります。
  • workArray[1] (33) と workArray[3] (11) の値を入れ替えます。
  • 入れ替え後の配列: {1, 5, 3, 2, 4}

2回目のループ (j = 2)

  • minIndex に 22(値は 55)が代入されます。
  • k を 33 から 55 まで増やして比較します。
    • k = 3: workArray[3] (33) < 55 → 真(minIndex は 33 に更新されます)
    • k = 4: workArray[4] (22) < 33 → 真(minIndex は 44 に更新されます)
    • k = 5: workArray[5] (44) < 22 → 偽
  • ループ終了後、minIndex は 44 となります。
  • workArray[2] (55) と workArray[4] (22) の値を入れ替えます。
  • 入れ替え後の配列: {1, 2, 3, 5, 4}

3回目のループ (j = 3)

  • minIndex に 33(値は 33)が代入されます。
  • k を 44 から 55 まで増やして比較します。
    • k = 4: workArray[4] (55) < 33 → 偽
    • k = 5: workArray[5] (44) < 33 → 偽
  • ループ終了後、minIndex は 33 のままです。
  • workArray[3] (33) と workArray[3] (33) を入れ替えます(配列は変化しません)。
  • 入れ替え後の配列: {1, 2, 3, 5, 4}

j の値が 33 と出力された直後の配列 workArray の出力は {1, 2, 3, 5, 4} となります。### 各選択肢の解説

  • ア (1, 2, 3, 4, 5): j = 4 の処理が終了した後の、最終的に昇順にソートされた結果です。j = 3 が出力された直後の状態ではありません。
  • イ (1, 2, 3, 5, 4): 正しいトレース結果です。j = 3 の処理が終了した時点での配列の状態を示しています。
  • ウ (4, 5, 3, 2, 1): このアルゴリズムの処理過程では現れない状態です。
  • エ (5, 4, 3, 2, 1): 降順にソートされた結果であり、昇順ソートを行う本プログラムの処理内容と矛盾するため誤りです。

Spineチーム