バイナリ検索を使用するために、ソートする必要があります。あなたが-4
を得ている理由は、
あなたのコレクションはソートされていません。バイナリ検索の場合、リストは各反復の半分で 'カット'されます。だから、:それは起動すると
は、topIndex == 0、下= 2
TopIndex -> (0) "Brandenburg",
(1) "Alabama"
BottomIndex -> (2) "Alberta
はbinarysearchは途中でアイテムをチェックします。(2-0)/ 2 = 1をあなたがしている場合Brandenburg
を検索してください。それはAlabama
とあなたの検索項目を比較します。文字「B
」は文字「A」よりも「大きい」。したがって、topIndexをインデックス1に移動します。
(0) "Brandenburg",
TopIndex -> (1) "Alabama"
BottomIndex -> (2) "Alberta
次に、次の '中間'アイテムと比較します。この場合もまたAlabama
。 (2-1)/2 = 1
。またbottomIndexと比較されますが、これは最後のものです。
binarysearchが負の数を返すとき、その項目が見つからないことを意味します。負の数は、挿入すべきインデックスです。(-result -1)
新しいアイテムを追加する場合は、インデックスに挿入する必要があります。(--4 -1) == 3
通常、ソートされたリスト/配列のバイナリ検索が行われます。しかし、リストが特定のパターンに従っているかどうかを変更することもできます。しかし、完全にランダムな順序の場合。binarySearchは機能しません – sinsuren
両方のメソッドのドキュメントを丁寧に読んでいます...そこにはっきりとはっきりしていないものを明確にしてください。 –
バイナリ検索の定義を見ると、バイナリ検索はソートされた配列内のターゲット値の位置を検索する検索アルゴリズムです。そのため、ソートされた配列に対してのみ動作します。 IndexOfの をご覧ください。https://msdn.microsoft.com/en-us/library/k8b1470s(v=vs.110).aspx –