
基本情報技術者試験 令和5年度 公開問題 科目B、全6問のうちの問3。
出典:令和5年度 基本情報技術者試験 公開問題 科目B 問3(プログラムは原本の画像を文字に書き起こし、字下げは 1 段を空白 2 つで表した。空欄は[ ]で表した)
次の
次の
大域: 整数型の配列: data ← {2, 1, 3, 5, 4}○sort(整数型: first, 整数型: last)整数型: pivot, i, jpivot ← data[(first + last) ÷ 2 の商]i ← firstj ← lastwhile (true)while (data[i] < pivot)i ← i + 1endwhilewhile (pivot < data[j])j ← j - 1endwhileif (i ≧ j)繰返し処理を終了するendifdata[i]とdata[j]の値を入れ替えるi ← i + 1j ← j - 1endwhiledataの全要素の値を要素番号の順に空白区切りで出力する /*** α ***/if (first < i - 1)sort(first, i - 1)endifif (j + 1 < last)sort(j + 1, last)endif
- ア1 2 3 4 5
- イ1 2 3 5 4
- ウ2 1 3 4 5
- エ2 1 3 5 4
答えと解説を開く
正解はエです。
sort(1, 5) では、
ほかの選択肢が違う理由
- ア整列が
全部終わった あとの 並びです。 α の 行を 最初に 実行するのは、 最初の 分割を 終えた 時点で、 まだ 前半と 後半を 並べ替えていません。 - イ前半の
2 と 1 だけを 並べ替えた形です。 最初の α の 時点では、 前半を 整列する sort(1, 2) は まだ 呼ばれていません。 - ウ後半の
5 と 4 だけを 並べ替えた形です。 最初の 分割では i と j が 3 の 位置で 出会い、 5 と 4 は 入れ替わりません。
仕組み
この
途中の