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

昇順に並んだ配列 a[0]〜a[9] = 3, 8, 12, 17, 23, 31, 38, 45, 52, 60 から、二分探索で38を探す。探す範囲を下端 lo = 0、上端 hi = 9 から始め、中央の位置を (lo + hi) ÷ 2 の切り捨てとする。38と比べられる要素の値を順に並べたものはどれか。

  1. A23, 38
  2. B31, 52, 45, 38
  3. C23, 45, 31, 38
答えと解説を見る

正解:C. 23, 45, 31, 38

最初は (0 + 9) ÷ 2 = 4 で a[4] = 23 と比べ、38の方が大きいので lo = 5 にします。次は (5 + 9) ÷ 2 = 7 で a[7] = 45 と比べ、38の方が小さいので hi = 6 にします。次は (5 + 6) ÷ 2 = 5 で a[5] = 31 と比べて lo = 6 とし、最後に a[6] = 38 で一致します。比較は4回で、要素数10の最大回数 ⌊log₂ 10⌋ + 1 = 4 に当たります。31、52、45、38は中央を切り上げにした場合の順で、問題の決め方とは違います。

  • A. 23と比べた後は、残りの範囲 a[5]〜a[9] の中央の a[7] = 45 と比べます。
  • B. 中央の位置を切り上げで決めた場合の順で、問題の決め方とは違います。
  • C. 正しい。a[4]、a[7]、a[5]、a[6] の順に比べ、4回目で見つかります。
この分野を解く 分野ページへ

関連する計算ツール

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

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

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

  1. 配列 5, 3, 8, 1, 4 をバブルソートで昇順に並べる。先頭から隣どうしを比べ、左の方が大きければ交換する操作を末尾まで1回行った(1パス)後の配列はどれか。
  2. 配列 29, 10, 14, 37, 13 を選択ソート(未整列の部分から最小値を探し、未整列の部分の先頭と交換する)で昇順に並べる。この操作を2回行った後の配列はどれか。
  3. 要素数10の配列を挿入ソートで昇順に並べる。2番目以降の要素を順に取り出し、左隣から順に比べて、取り出した値以下の要素が見つかるか先頭に達するまで比べる。最初から昇順に並んでいる場合と、降順に並んでいる場合の比較の回数の組はどれか。
  4. 最悪の場合でも計算量が O(n log n) で、作業用の配列などの追加の記憶領域をほとんど使わずに並べ替えられるソートはどれか。
  5. (名前, 点数) のデータ (A, 80)、(B, 70)、(C, 80)、(D, 70) がこの順に並んでいる。点数の昇順に安定ソートで並べ替えたときの名前の順はどれか。