プログラミング作法 第2章 アルゴリズムとデータ構造 2.3 ライブラリ
ANSI Cにはbsearchという二分探索ルーチンも定義されている。
キーを指定するのが面倒なので、bsearchはqsortよりも使い勝手が悪い。優れた汎用ソートルーチンには1〜2ページ分のコードが必要だが、二分探索ルーチンは、bsearchとのインターフェイスをとるのに必要なコードと大差ないサイズで記述できる。それでも、自分では書かずにbsearchを使ったほうがいいと思う。二分探索を正しく実装するのはプログラマにとって意外なほど難しいことが、昔から実証されているからだ。
問題2−1
- 配列の要素を1個選択する(「ピボット」)
- その他の要素を2つのグループに分割する
- ピボット値よりも小さい「チビ」ができる
- 「チビ」のなかから要素を1個選択する「チビ−ピボット」
- チビ−ピボット値よりも小さいグループ「チビ−チビ」と、大きいか等しい「チビ−デカ」ができる
- 以下、1つのグループの要素が1個以下になるまでくりかえし
- ピボット値よりも大きいか等しい「デカ」ができる
- 「デカ」のなかから要素を1個選択する「デカ−ピボット」
- デカ−ピボット値よりも小さいグループ「デカ−チビ」と、大きいか等しい「デカ−デカ」ができる
- 以下、1つのグループの要素が1個以下になるまでくりかえし
- ピボット値よりも小さい「チビ」ができる