データ構造とアルゴリズム

配列の中央の要素と比べて、探す範囲を半分ずつに絞っていく二分探索を使うための前提条件として正しいものはどれか。

  1. Aデータの個数が2のべき乗であること
  2. Bデータがキーの順に整列されていること
  3. Cデータに同じ値が含まれていないこと
答えと解説を見る

正解:B. データがキーの順に整列されていること

二分探索は、中央の要素と比べた結果から、目的の値が前半と後半のどちらにあるかを決めて範囲を半分にします。これはデータが整列されているから言えることで、整列されていない配列には使えません。データの個数が2のべき乗でなくても、中央の位置を (下端 + 上端) ÷ 2 の切り捨てなどで決めれば問題なく動きます。同じ値が含まれていても探索はでき、その値のどれか1つが見つかります(最初の位置を求めるには少し工夫が要ります)。

  • A. 中央の位置を切り捨てなどで決めれば、個数がいくつでも使えます。
  • B. 正しい。整列されているので、中央との比較で前半か後半かを決められます。
  • C. 同じ値があっても探索はでき、そのどれかが見つかります。
この分野を解く 分野ページへ

関連する計算ツール

データ構造とアルゴリズムの参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

データ構造とアルゴリズムのほかの問題

  1. 昇順に整列された異なる1,000個の値から二分探索で値を探す。1回の比較で「一致・より小さい・より大きい」が分かるものとすると、見つかる場合も見つからない場合も含めて、比較の回数は最大で何回か。
  2. 昇順に並んだ配列 a[0]〜a[9] = 3, 8, 12, 17, 23, 31, 38, 45, 52, 60 から、二分探索で38を探す。探す範囲を下端 lo = 0、上端 hi = 9 から始め、中央の位置を (lo + hi) ÷ 2 の切り捨てとする。38と比べられる要素の値を順に並べたものはどれか。
  3. 配列 5, 3, 8, 1, 4 をバブルソートで昇順に並べる。先頭から隣どうしを比べ、左の方が大きければ交換する操作を末尾まで1回行った(1パス)後の配列はどれか。
  4. 配列 29, 10, 14, 37, 13 を選択ソート(未整列の部分から最小値を探し、未整列の部分の先頭と交換する)で昇順に並べる。この操作を2回行った後の配列はどれか。
  5. 要素数10の配列を挿入ソートで昇順に並べる。2番目以降の要素を順に取り出し、左隣から順に比べて、取り出した値以下の要素が見つかるか先頭に達するまで比べる。最初から昇順に並んでいる場合と、降順に並んでいる場合の比較の回数の組はどれか。