配列のマージ処理のトレース

■ 解き方の方針 αは最後のwhile内にあります。まず先頭のwhileでどこまで併合されるかを追い、その終了時のjの値からαの実行回数を求めます。 ■ 最初のwhileをトレースする 初期値はdata1={2, 3}、data2={1, 4}、i=1、j=1、k=1です。 回 比較 work[k] に入れる値 i j k(格納後) 1 data1[1]=2 と data2[1]=1 1(data2から) 1 2 2 2 data1[1]=2 と data2[2]=4 2(data1から) 2 2 3 3 data1[2]=3 と data2[2]=4 3(data1から) 3 2 4 α data1は使い切った 4(data2[2]、αで1回) 3 3 5 ここでi=3となり、i ≤ n1(2)が偽になるので、最初のwhileを終了します。この時点のworkは{1, 2, 3, 未定義}、jは2です。 ■ αの実行回数 二つ目のwhileはi=3 > n1なので実行されません。最後のwhileではj=2 ≤ n2が一度だけ成立し、αでdata2[2]の4をwork[4]へ格納します。その後j=3となって終了します。 ■ 正解と誤答の見分け方 したがって、正解は イ です。 αは「data2に残った要素数」だけ実行されます。この例で残るのは4だけなので、実行回数は1回です。

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

関数 merge は、昇順に整列された整数型の配列 data1 及び data2 を受け取り、これらを併合してできる昇順に整列された整数型の配列を返す。
関数 merge を merge ({2, 3}, {1, 4}) として呼び出すと /*** α ***/ の行は   。

[プログラム]
○整数型の配列: merge(整数型の配列: data1, 整数型の配列: data2)
整数型: n1 ← data1の要素数
整数型: n2 ← data2の要素数
整数型の配列: work ← {(n1 + n2) 個の 未定義の値}
整数型: i ← 1
整数型: j ← 1
整数型: k ← 1
while ((i ≤ n1) and (j ≤ n2))
if (data1[i] ≤ data2[j])
work[k] ← data1[i]
i ← i + 1
else
work[k] ← data2[j]
j ← j + 1
endif
k ← k + 1
endwhile
while (i ≤ n1)
work[k] ← data1[i]
i ← i + 1
k ← k + 1
endwhile
while (j ≤ n2)
work[k] ← data2[j] /*** α ***/
j ← j + 1
k ← k + 1
endwhile
return work

出典令和6年度 公開問題 基本情報技術者試験 科目B 問4
ア
実行されない
イ
1回実行される
ウ
2回実行される
エ
3回実行される