ITパスポート過去問 令和8年度(2026年)問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, 4, 5
- イ:1, 2, 3, 5, 4
- ウ:4, 5, 3, 2, 1
- エ:5, 4, 3, 2, 1
- ア
- イ
- ウ
- エ
正解と解き方・学習ポイント(AI解説)
この手続sortは選択ソートです。各jで、workArrayのj番目から末尾までの最小値の位置minIndexを探し、workArray[j]とworkArray[minIndex]を入れ替えます。{3,5,1,2,4}は、j=1で{1,5,3,2,4}、j=2で{1,2,3,5,4}になり、j=3では探索範囲{3,5,4}の最小値が3で入替え後も変化しないので、j=3の直後の出力は1,2,3,5,4です。
Point
この問題は,擬似コードで示された選択ソートの処理を,変数j,k,minIndexの動きに沿って順に追い,途中の配列workArrayの状態を正しく求められるかを確認することを目的としています。
解くために必要な知識
この問題を解くには、配列の要素番号と、選択ソートの処理手順を理解している必要があります。
用語の整理
| 用語名 | 意味 |
|---|---|
| 配列 | 複数の値を、要素番号(添字)で管理するデータ構造です。 |
| 要素番号 | 配列内の位置を表す番号です。この問題では1から始まります。 |
| 昇順 | 値が小さい順に並べることです。 |
| 選択ソート | 未整列部分(j番目から末尾)から最小値を探し、workArray[j]と入れ替えることを繰り返す整列方法です。 |
選択ソートの動き(このプログラム)
外側ループ(j)の意味
-
j=1の処理が終わると、1番目の要素が全体で最小の値になります。
-
j=2の処理が終わると、2番目の要素が残りの中で最小の値になります。
-
以降も同様に、処理が終わった位置jには、その時点で確定した最小値が置かれます。
内側ループ(k)の意味
-
kは(j+1)から末尾まで動きます。
-
workArray[k] < workArray[minIndex]ならminIndexを更新します。
入れ替えの意味
-
各jについて、workArray[j]とworkArray[minIndex]を入れ替えます。
-
minIndex=jの場合は、同じ要素同士の入れ替えになり、配列は変化しません。
問題の解法手順
問題では、j=3が出力された直後のworkArrayを求めます。外側ループ1回ごとに、j番目にその時点での最小値が確定します。
解く手順
初期状態
workArray = {3, 5, 1, 2, 4}
j=1
-
探索範囲は1番目から5番目({3, 5, 1, 2, 4})です。
-
最小値は1(minIndex=3)です。
-
workArray[1]とworkArray[3]を入れ替えます。
-
結果
- {1, 5, 3, 2, 4}
j=2
-
探索範囲は2番目から5番目({5, 3, 2, 4})です。
-
最小値は2(minIndex=4)です。
-
workArray[2]とworkArray[4]を入れ替えます。
-
結果
- {1, 2, 3, 5, 4}
j=3
-
探索範囲は3番目から5番目({3, 5, 4})です。
-
最小値は3(minIndex=3)です。
-
workArray[3]とworkArray[3]を入れ替えるため、配列は変化しません。
-
j=3の出力直後の結果
- 1, 2, 3, 5, 4
選択肢ごとの解説
- ア:不正解
最終的に整列が完了した結果です。j=3直後では末尾2要素(5と4)がまだ入れ替わっていないため、この並びにはなりません。
- イ:正解
j=1で1を1番目に、j=2で2を2番目に移動した結果、{1,2,3,5,4}になります。j=3では最小値が3で要素番号も3のため配列は変化せず、この並びが出力されます。
- ウ:不正解
選択ソートでは、先頭側から最小値が確定していきます。j=3直後に先頭が4になることはありません。
- エ:不正解
この手続は最小値を前に移動して昇順に並べ替える処理なので、降順の並びにはなりません。
まとめ
この手続sortは選択ソートです。各jで、workArrayのj番目から末尾までの最小値の位置minIndexを探し、workArray[j]とworkArray[minIndex]を入れ替えます。{3,5,1,2,4}は、j=1で{1,5,3,2,4}、j=2で{1,2,3,5,4}になり、j=3では探索範囲{3,5,4}の最小値が3で入替え後も変化しないので、j=3の直後の出力は1,2,3,5,4です。
テクノロジ系 > 基礎理論 > アルゴリズムとプログラミング
最終的に整列が完了した結果です。j=3直後では末尾2要素(5と4)がまだ入れ替わっていないため、この並びにはなりません。
j=1で1を1番目に、j=2で2を2番目に移動した結果、{1,2,3,5,4}になります。j=3では最小値が3で要素番号も3のため配列は変化せず、この並びが出力されます。
選択ソートでは、先頭側から最小値が確定していきます。j=3直後に先頭が4になることはありません。
この手続は最小値を前に移動して昇順に並べ替える処理なので、降順の並びにはなりません。