科目Bアルゴリズム

2023年春 科目B 問3
アルゴリズムの過去問

まずは自分で考えて、理由を確かめよう。

LET'S TRY

問題文

次の記述中の □ に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。


次の手続sortは,大域の整数型の配列dataの,引数firstで与えられた要素番号から引数lastで与えられた要素番号までの要素を昇順に整列する。ここで,first<lastとする。手続sortをsort(1, 5) として呼び出すと,/*** α ***/ の行を最初に実行したときの出力は"□"となる。


〔プログラム〕

大域: 整数型の配列: data ← {2, 1, 3, 5, 4}

○sort(整数型: first, 整数型: last)

整数型: pivot, i, j

pivot ← data[(first + last) ÷ 2 の商]

i ← first

j ← last

while (true)

while (data[i] < pivot) : i ← i + 1 : endwhile

while (pivot < data[j]) : j ← j - 1 : endwhile

if (i ≧ j)

繰返し処理を終了する

endif

data[i]とdata[j]の値を入れ替える

i ← i + 1

j ← j - 1

endwhile

dataの全要素の値を要素番号の順に空白区切りで出力する /*** α ***/

if (first < i - 1)

sort(first, i - 1)

endif

if (j + 1 < last)

sort(j + 1, last)

endif

当てはまるものを、ひとつ選んでね。

1〜4キーで選択し、Enterキーで採点できます。

出典:令和5年度 基本情報技術者試験 科目B 問3
IPAの公開問題について ↗

LET'S UNDERSTAND

キホン猫と、理由を確かめよう。

自分で考えてから、解説を開いてみてね。

正解と解説を見る

正解は エ です。

sort(1,5)を実行:pivot=data[(1+5)÷2=3]=data[3]=3。i=1,j=5。内側のwhileで、data[1]=2<3→i=2,data[2]=1<3→i=3,data[3]=3(停止)。pivot<data[5]=4→j=4,pivot<data[4]=5→j=3,3<3は偽(停止)。i=3≧j=3なのでbreakし、スワップなし。出力時点でdata={2,1,3,5,4}のまま、出力は"2 1 3 5 4"。

同じ分野の問題を探す →

この問題を、学びのノートに。

Xでシェア ↗

学習ノートを読み込んでいます…