手続 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 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 の全ての要素を先頭から順にコンマ区切りで出力する
この設問が問うていること
この設問は、選択ソート(Selection Sort)のプログラムの動作を理解し、特定の処理段階における配列の状態を正確に追跡できるかを問う設問です。
総合解説
この問題は、与えられたプログラム(選択ソートのアルゴリズム)の動作を正確にトレースする能力を問うものです。配列`numberArray`が`{3, 5, 1, 2, 4}`で初期化され、`workArray`にコピーされます。配列の要素番号は1から始まります。 プログラムの実行を追跡します。 初期状態: `workArray = {3, 5, 1, 2, 4}` 1. j = 1 のとき: ・ `workArray[1]`から`workArray[5]`の中で最小値を探します。最小値は`workArray[3]`の`1`です。 ・ `workArray[1]` (`3`) と`workArray[3]` (`1`) を入れ替えます。 ・ `workArray`は`{1, 5, 3, 2, 4}`になります。 ・ `j`の値`1`が出力され、`workArray`の要素`1,5,3,2,4`が出力されます。 2. j = 2 のとき: ・ `workArray[2]`から`workArray[5]`の中で最小値を探します。現在の`workArray`は`{1, 5, 3, 2, 4}`です。 ・ `workArray[2]` (`5`) から`workArray[5]` (`4`) の中で最小値は`workArray[4]`の`2`です。 ・ `workArray[2]` (`5`) と`workArray[4]` (`2`) を入れ替えます。 ・ `workArray`は`{1, 2, 3, 5, 4}`になります。 ・ `j`の値`2`が出力され、`workArray`の要素`1,2,3,5,4`が出力されます。 3. j = 3 のとき: ・ `workArray[3]`から`workArray[5]`の中で最小値を探します。現在の`workArray`は`{1, 2, 3, 5, 4}`です。 ・ `workArray[3]` (`3`) から`workArray[5]` (`4`) の中で最小値は`workArray[3]`の`3`です。 ・ `workArray[3]` (`3`) と`workArray[3]` (`3`) を入れ替えます。(値は同じなので、配列は変わりません) ・ `workArray`は`{1, 2, 3, 5, 4}`のままです。 ・ `j`の値`3`が出力され、`workArray`の要素`1,2,3,5,4`が出力されます。 問題は「jの値が3と出力された直後の workArray の全ての要素の出力はどれか」と問われています。上記のトレースから、`j`が`3`と出力された直後の`workArray`は`{1, 2, 3, 5, 4}`であることがわかります。したがって、選択肢イが正解です。 このアルゴリズムは選択ソート(Selection Sort)と呼ばれる基本的なソートアルゴリズムの一つです。各ステップで未ソート部分から最小値を見つけ出し、それを未ソート部分の先頭と交換することでソートを進めます。
こんな聞き方もできます(タップで質問)