2分探索プログラム
2分探索のアルゴリズム
- もし、探索開始よりも探索終了点の方が前にあった場合、探索失敗
- 探索領域の中間点のデータを調べる
- 中間データが探索データそのもの:探索成功
- 中間データが探索データより小さい:中間点より右側(中間点+1)を新たな探索開始点として自分自身を呼び出す。
- 中間データが探索データより大きい:中間点より左側(中間点-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の力は大きい。