Algo Zoo

二分探索

問題

アルゴリズム

使用するデータ構造

$\gdef\vleft{\mathrm{left}}$ $\gdef\vright{\mathrm{right}}$ $\gdef\vmid{\mathrm{mid}}$

手続き

  1. $\vleft \gets 0$ と $\vright \gets (N-1)$ で各変数を初期化.
  2. $\vleft \leq \vright$が成立する間,以下を繰り返す:
    • $\displaystyle\vmid \gets \left\lbrack \frac{\vleft + \vright}{2} \right\rbrack$ とする(注: $\lbrack x \rbrack$は$x$の小数点以下を切り捨てて整数にする関数)
    • $a[\vmid]$ の値に応じて以下の通り場合分け:
      • $a[\vmid] = v$ ならば,値が存在したことになるので添字 $\vmid$ を返して終了;
      • $a[\vmid] < v$ ならば,$\vleft \gets (\vmid + 1)$ として 2. を繰り返す;
      • $a[\vmid] > v$ ならば,$\vright \gets (\vmid - 1)$ として 2. を繰り返す.
  3. この部分に達した場合,配列 $a$ 中に $v$ が存在しないので,その旨を返して終了.

ビジュアライザ