次の記述中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 関数searchは、引数dataで指定された配列に、引数targetで指定された値が含まれていればその要素番号を返し、含まれていなければ-1を返す。dataは昇順に整列されており、値に重複はない。 関数searchには不具合がある。例えば、dataの 場合は、無限ループになる。 〔プログラム〕 ○整数型: search(整数型の配列: data, 整数型: target) 整数型: low, high, middle low ← 1 high ← dataの要素数 while (low ≦ high) middle ← (low + high) ÷ 2 の商 if (data[middle] < target) low ← middle elseif (data[middle] > target) high ← middle else return middle endif endwhile return -1

2分探索でlow←middleとすると範囲が縮まらず無限ループ

頻出基本情報技術者試験2022年度 公開問題 科目B13/アルゴリズムとプログラミング / 探索アルゴリズム

○整数型: search(整数型の配列: data, 整数型: target) 整数型: low, high, middle low ← 1 high ← dataの要素数 while (low ≦ high) middle ← (low + high) ÷ 2 の商 if (data[middle] < target) low ← middle elseif (data[middle] > target) high ← middle else return middle endif endwhile return -1

選択肢

正解と解説

正解: 要素数が2で、targetがdataの末尾要素の値と等しい

正しい2分探索では範囲を狭めるときに low ← middle+1、high ← middle-1 とします。このプログラムは low ← middle としているため、探索範囲が縮まらない場合があります。要素数2で目的の値が末尾にあるとき、middleは(1+2)÷2の商で常に1となり、data[1]<targetからlowが1のまま更新されず、条件が変わらないまま繰り返してしまいます。

選択肢ごとの解説

出典:令和4年度 公開問題 基本情報技術者試験 科目B 問13(IPA)

同じ分野の他の問題

最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。