二分探索アルゴリズムを実装してください。
二分探索アルゴリズムは、配列を半分に分割することを繰り返し、探している値が含まれる半分だけを残すことで、配列の中から目的の値を見つけ出します。 これにより、目的の値が見つかるまで、あるいは候補となる場所がすべてなくなるまで、その値がありうる場所をすばやく絞り込んでいけます。
二分探索は、配列がソートされているときにだけ使えます。
アルゴリズムは次のようなものです。
例を見てみましょう。
次のソート済みの配列から、数値23を探すとしましょう:[4, 8, 12, 16, 23, 28, 32]。
[23, 28, 32]が残ります。[23]。Rustの標準ライブラリには、すでに二分探索の関数が用意されています。この演習では、この関数は使わず、代わりにほかの基本的な道具だけを使いましょう。
テストは通りましたか? コードはきれいになりましたか? よければ、もう少し試せることもあります。
find関数は、おそらく数値のスライスにしか使えないでしょう。しかし、Rustの型システムは十分に柔軟なので、順序を付けられる要素を持つすべてのスライスで動くfind関数を作れます。find関数はスライスだけでなく、VecやArrayでも同時に動くようにできます。ボーナスのテストを実行するには、#[ignore]フラグを外して、次のようにgenericフィーチャーを付けてテストを実行します。
$ cargo test --features generic
ぜひ、解答へのコメントで感想を聞かせてください。この実験でコードは良くなりましたか? 悪くなりましたか? 何か学べることはありましたか?