令和8年度 問67 配列を並べ替える手続の途中経過

問題

手続 sort は,要素数が2以上の整数型の配列を引数 numberArray で受け取り,その要素を昇順に並べ替えた結果を出力する。手続 sort の動作確認のために,処理の途中でjの値と workArray の全ての要素を出力する。配列 numberArray を{3,5,1,2,4}とし,手続 sort を sort(numberArray) として呼び出したとき,jの値が3と出力された直後の workArray の全ての要素の出力はどれか。ここで,配列の要素番号は1から始まる。 〔プログラム〕

手続sortのプログラム。入力をworkArrayに複製。jを1から要素数-1まで増やし、minIndexをjに設定。kをj+1から要素数まで走査し、より小さい要素を見つけるとminIndexをkに変更。workArray[j]とworkArray[minIndex]を交換した後、jと配列全体を出力する。繰返し終了後も配列全体を出力する。

1,2,3,4,5

1,2,3,5,4

4,5,3,2,1

5,4,3,2,1

先に解説を見る
正解イ

1,2,3,5,4

解説

この問題のポイント

この手続は、未整列部分の最小値を探し、その部分の先頭と交換します。各回の出力は交換の後です。求めるのは最後の結果ではなく、jが3と出力された直後の配列です。

処理を追うと

  1. 初期配列は {3,5,1,2,4} です。
  2. j=1では最小値1と先頭の3を交換し、{1,5,3,2,4} となります。
  3. j=2では残りの最小値2と5を交換し、{1,2,3,5,4} となります。
  4. j=3では残りの {3,5,4} の最小値3が既にその先頭にあるため、並びは変わりません。

正解:イ

出力は 1,2,3,5,4 です。この時点で末尾の5と4はまだ整列していません。

選択ソートの途中経過。初期3,5,1,2,4、j=1終了後1,5,3,2,4、j=2終了後1,2,3,5,4、j=3終了後も1,2,3,5,4。最後まで整列した結果と区別する。
解説図:選択ソートの途中経過

同じ分野の問題

編集・確認:kakoloop · 編集方針

公開日:

内容更新:

問題・解説の誤りを報告する

画像を拡大表示