二分探索のフローチャートは次のようになります。
二分探索のフローチャート
二分探索の処理手順は次の4つの処理に分けることができます。
- 1 初期設定処理
- 2 繰り返し処理
- 3 探索処理
- 4 表示処理
二分探索のアルゴリズムを処理単位ごとに確認します。
1 初期設定処理
初期設定処理では、①、②で二分探索に必要な初期設定を行います。
① 配列dataと探索値targetの設定、発見フラグfound_flagの設定
二分探索を行うために必要な変数の設定を行います。
data:探索する配列。昇順にデータが格納されている。
target:探索値。
found_flag:探索の状態を保持。見つかっていない場合はFalse、見つかった場合はTrueが入る。
② 探索範囲を表すlowとhighの設定
探索範囲を変数lowとhighで表します。
lowは範囲の最小の添字、highは範囲の最大の添字を代入します。
low:探索範囲の最小の添字。初期値は0。
high:探索範囲の最大の添字。初期値は配列の要素数-1。今回は8を設定。
2 繰り返し処理
繰り返し処理では、③、④で二分探索の繰り返しの制御を行います。
③ 探索範囲の中央の位置を計算する
探索範囲の中間位置を計算します。
詳しい説明は後述します。
④ 繰り返し処理の条件
繰り返し処理の条件を記述します。
繰り返しを続ける条件は以下の2つの条件が成立している間です。
- found_flag != True : データが見つからない間
- (c):詳しくは後述します。
3 探索処理
探索処理では、⑤~⑧で探索値と配列の要素を比較して、探索値が見つかるか調べます。
⑤ 比較処理
探索値と同じデータか比較して判定します。
同じデータであれば⑦へ進みます。
異なるデータであれば、新しく探索範囲の設定を行うため⑥へ移動します。
⑥ 探索範囲の判定
探索値と比較した配列の要素の値の大小関係を調べ、
次の探索範囲が現在よりも左側なのか右側なのかを判定します。
⑧でlowもしくはhighの値を変更することで探索範囲の更新をします。
⑦ 発見フラグの設定
⑤の判定で探索データが見つかった場合の処理です。
変数「found_flag」にTrueを代入し、探索値が見つかった状態にします。
⑧ 探索範囲の更新
探索範囲を再設定するためにlowとhighの値の更新をします。
詳細は後述します。
4 表示処理
⑨ 探索データが見つかったかどうかの判定
探索データが見つかったかどうかで表示内容を変えるための処理です。
表示処理は⑩で行います。
⑩ 結果の表示処理
データが見つかった場合:「見つかりました」と表示する。
データが見つからなかった場合:「見つかりませんでした」と表示する。
上のフローチャートには(a)、(b-1)、(b-2)、(c)の4か所の空欄があります。
3つとも二分探索処理を行うときには重要なところなので、一つずつ何が入るか確認していきます。