問題
問4
次の記述中の【 】に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。
- 関数mergeは,昇順に整列された整数型の配列data1及びdata2を受け取り,これらを併合してできる昇順に整列された整数型の配列を返す。
- 関数mergeをmerge({2, 3}, {1, 4})として呼び出すと,/*** α ***/ の行は【 】。

- 実行されない
- 1回実行される
- 2回実行される
- 3回実行される
[出典:基本情報技術者試験 令和6年度(科目B) 問4]
正解
正解は「イ」です。
解説
本問は、2つの昇順に並んだ整数配列を1つに統合する「マージ処理」の理解を問うものです。
配列data1 = {2, 3}
、data2 = {1, 4}
を引数に渡したとき、関数merge
がどのように動作し、/*** α ***/
の行が何回実行されるかを答える必要があります。
関数merge
は、2つの配列data1
とdata2
を昇順に結合します。while ((i ≤ n1) and (j ≤ n2))
のループでは、data1[i]とdata2[j]を比較し、小さい方をwork[k]
に代入します。そして、どちらかの配列の末尾まで処理が終わった後に、残りの配列の要素をworkに詰めていきます。これがwhile (i ≤ n1)
およびwhile (j ≤ n2)
の部分です。
このとき、data1 = {2, 3}(n1 = 2)とdata2 = {1, 4}(n2 = 2)です。比較のループを順にたどると:
- data1[1]=2, data2[1]=1 → data2の1が小さい → workに1を入れ、jが2に
- data1[1]=2, data2[2]=4 → data1の2が小さい → workに2を入れ、iが2に
- data1[2]=3, data2[2]=4 → data1の3が小さい → workに3を入れ、iが3(i > n1)
この時点でdata1の全要素を処理済みで、data2の要素(4)が1つ残っているため、while (j ≤ n2)
に入り、1回だけ/*** α ***/
の行が実行されます。したがって、正解は「1回実行される」です。
ア(実行されない):
data2には要素4が残っており、それを処理するためにwhile (j ≤ n2)
が1回実行されます。このため「実行されない」は誤りです。
ウ(2回実行される):
data2の要素は「1, 4」の2つですが、「1」は最初の比較ループで処理されており、残る「4」のみがwhile (j ≤ n2)で処理されます。したがって2回ではありません。
エ(3回実行される):
data2で処理されずに残るのは1つの要素だけなので、3回も実行されません。
難易度
この問題は、基本的なソートアルゴリズムの一部である「マージ処理」の理解が問われる初級~中級レベルの問題です。ループや条件分岐の実行順序を正確に追う必要があり、初心者にとっては配列インデックスの理解にやや時間を要しますが、繰り返し学習で十分習得可能です。
用語補足
配列:
配列とは、複数のデータを順序付けて格納するデータ構造です。番号(インデックス)を使って要素を個別にアクセスできます。
while文:
条件が真(true)の間、繰り返し処理を行う制御構文です。条件が偽になるとループを抜けます。
マージ処理:
2つの整列済みの配列を1つに統合して、整列を保ったまま結合する処理です。マージソートなどで使われます。
対策
マージ処理やソートアルゴリズムに関する基本的な考え方を理解し、実際に配列操作を紙と鉛筆でトレースする練習をしましょう。また、while
文とif
文の動作を順番に確認することで、処理の流れを把握できます。特に「残りの要素をどう処理するか」が重要なポイントです。