2分探索プログラム

2分探索のアルゴリズム

  1. もし、探索開始よりも探索終了点の方が前にあった場合、探索失敗
  2. 探索領域の中間点のデータを調べる
  3. 中間データが探索データそのもの:探索成功
  4. 中間データが探索データより小さい:中間点より右側(中間点+1)を新たな探索開始点として自分自身を呼び出す。
  5. 中間データが探索データより大きい:中間点より左側(中間点-1)を新たな探索開始点として自分自身を呼び出す。

私の中では、1つ目が出て来なさそう。注意しよう。
2分探索のコード

# +data_to_find+::
#  検索対象データ
# +data+::
# 検索するデータが入った配列
# +startIdx+::
#  検索開始位置
# +endIdx+::
# 探索終了位置
#
# === 戻り値
# 見つかった位置を返す(先頭が0)。もし見つからなかったら-1を返す


  return -1 if startIdx > endIdx
  centerIdx = (startIdx + endIdx) / 2
  return centerIdx if data[centerIdx] == data_to_find
  if data[centerIdx] > data_to_find
    bsearch(data_to_find, data, startIdx, centerIdx - 1)
  else
    bsearch(data_to_find, data, centerIdx + 1, endIdx)
  end

data = []とかdata = [1]を試してみると最初のreturn ifの力は大きい。