令和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 の全ての要素 を先頭から順にコンマ区切りで出力する
出典:令和8年度 ITパスポート試験 問67
- ア1,2,3,4,5
- イ1,2,3,5,4
- ウ4,5,3,2,1
- エ5,4,3,2,1
正解:イ
解説
このプログラムは選択ソートです。j 番目から末尾までで最小の値を探し,j 番目と入れ替えます。初期状態 {3, 5, 1, 2, 4} で順に追うと,j=1 では最小の 1(3番目)と1番目を入れ替えて {1, 5, 3, 2, 4},j=2 では 5,3,2,4 の最小の 2(4番目)と2番目を入れ替えて {1, 2, 3, 5, 4},j=3 では 3,5,4 の最小が 3 番目の 3 自身なので入替えが起きず {1, 2, 3, 5, 4} のままです。j の値 3 を出力した直後の出力は 1,2,3,5,4 です。
選択肢ごとの解説
- ア誤り。1,2,3,4,5 は,j=4 の処理で5番目の 4 と入れ替えた後の完成形で,j=3 の直後ではありません。
- イ正しい。j=3 の時点の workArray は {1, 2, 3, 5, 4} なので,1,2,3,5,4 と出力されます。
- ウ誤り。このプログラムは昇順に並べ替えるため,降順の並びにはなりません。
- エ誤り。降順の並びで,昇順に並べ替えるこのプログラムの途中経過としてあり得ません。