修了試験 2022-06-12実施分 基本情報技術者試験 問9
配列A[i](i=1,2,…,n)を,次のアルゴリズムによって整列する。 行2〜3の処理が初めて終了したとき,必ず実現されている配列の状態はどれか。 〔アルゴリズム〕 行番号 1 iを1からn-1まで1ずつ増やしながら行2〜3を繰り返す 2 jをnからi+1まで1ずつ減らしながら行3を繰り返す 3 もしA[j]<A[j-1]ならば,A[j]とA[j-1]を交換する
正答1
解説
正解は1です。 このアルゴリズムはバブルソート(隣接交換法)で、配列の末尾から先頭に向かって隣どうしを比べます。 後ろの要素A[j]が前の要素A[j-1]より小さいときに交換するので、小さい値が前へ前へと運ばれます。 【処理のたどり方】 行2〜3が初めて終了するのは、i=1のときの内側の繰返しが終わった時点です。 このとき、jはnから2まで1ずつ減りながら、A[j]とA[j-1]を比べます。 最小値がどの位置にあっても、そこからjが減るたびに交換されて1つずつ前へ移動します。 j=2の比較を終えた時点で、最小値はA[1]まで運ばれています。 【選択肢別解説】 1:○ 1回目の内側の繰返しで、最小値が末尾側から先頭まで順に交換されてA[1]に入ります。 したがって、A[1]が最小値になることは必ず実現されています。 2:× 小さい値を前へ移す交換なので、最大値はA[1]には集まりません。 A[1]が最大値になるのは、すべての要素が等しい場合に限られます。 3:× 最小値は前方に運ばれるので、A[n]には入りません。 A[n]が最小値になることは必ずしも実現されません。 4:× 末尾から先頭へ比べる方式では、最大値が末尾に確定するとは限りません。 例えば最大値が最初からA[1]にあれば、1回目の処理後はA[2]に移るだけで、A[n]には来ません。 【ポイント】 バブルソートは、比較の向きと交換条件から「どちらの端に何が確定するか」を判断します。 本問のように末尾から比べて小さい方を前に出す形では、1巡ごとに先頭側から最小値が確定します。まとめて解く
修了試験 2022-06-12実施分を通しで解く(80問)→