選択ソートの途中経過

正解は イ (1, 2, 3, 5, 4)です。 このプログラムは 選択ソート です。外側のループで j を1つずつ進め、「j番目から末尾までの中で最小の要素」を探して j番目と入れ替えます。入れ替えた後に j の値と workArray を出力します。 j 探す範囲 最小値(要素番号) 入れ替え後の workArray 1 3, 5, 1, 2, 4 1([3]) 1, 5, 3, 2, 4 2 5, 3, 2, 4 2([4]) 1, 2, 3, 5, 4 3 3, 5, 4 3([3]) 1, 2, 3, 5, 4 j=3 では最小値 3 がすでに3番目にあるので、並びは変わりません。j=3 と出力された直後の出力は 1, 2, 3, 5, 4 です(5 と 4 が入れ替わるのは次の j=4 のとき)。 1, 2, 3, 4, 5 は j=4 の処理を終えた後の並びです。 4, 5, 3, 2, 1 はどの時点の並びにも現れません。 降順の並びです。このプログラムは最小値を前へ移すので昇順に並びます。

手続sortは,要素数が2以上の整数型の配列を引数numberArrayで受け取り,その要素を昇順に並べ替えた結果を出力する。配列numberArrayを{3, 5, 1, 2, 4}とし,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の全ての要素を先頭から順にコンマ区切りで出力する

出典令和8年度 ITパスポート試験 公開問題 問67
ア
1, 2, 3, 4, 5
イ
1, 2, 3, 5, 4
ウ
4, 5, 3, 2, 1
エ
5, 4, 3, 2, 1