2016-09-19 9 views
-2

私はリストとその値が( "Brandenburg"、 "Alabama"と "Alberta")です。 BinarySearch("Brandenburg")メソッドを使用すると、0の代わりに-4が返されますが、このリストをソートすると正しいインデックスを取得できます。なぜ私はソートされていないリストを使用する場合、それは間違った値を返しますか?また、IndexOf("Brandenburg")メソッドから正しいインデックスを取得しました。どの方法が便利なのですか?事前にBinarySearchとIndexOfメソッドの動作を理解する必要があります

おかげで、 Prithivi

+0

通常、ソートされたリスト/配列のバイナリ検索が行われます。しかし、リストが特定のパターンに従っているかどうかを変更することもできます。しかし、完全にランダムな順序の場合。binarySearchは機能しません – sinsuren

+2

両方のメソッドのドキュメントを丁寧に読んでいます...そこにはっきりとはっきりしていないものを明確にしてください。 –

+1

バイナリ検索の定義を見ると、バイナリ検索はソートされた配列内のターゲット値の位置を検索する検索アルゴリズムです。そのため、ソートされた配列に対してのみ動作します。 IndexOfの をご覧ください。https://msdn.microsoft.com/en-us/library/k8b1470s(v=vs.110).aspx –

答えて

1

バイナリ検索を使用するために、ソートする必要があります。あなたが-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

0

バイナリ検索の仕組みを説明しましょう。それは、配列の中央に見えることで、7は7大きいか小さい

{1, 3, 5, 7, 10, 15, 20} 

そして、私が検索を行いますバイナリ何15の指標を見つけたい:

は、あなたがこの配列を持っていると言います15歳以上? 15より小さい場合は、配列の後半(10,15,20)で同じことをもう一度行います。それが15より大きい場合は、前半(1,3,5)に行います。それが15に等しい場合、その手段15が見出される。

これは、バイナリ検索が機能するように配列をソートする必要があることを意味します。これは、配列上でバイナリ検索を行うと、負の数を返す理由を説明しています。明らかに、メソッドはバイナリ検索アルゴリズムを使用して要求した文字列を見つけることができません。

IndexOfで正しいインデックスを取得できます。これは、IndexOfが線形検索を使用してアイテムを検索するためです。配列内の各要素を調べ、探している要素と比較します。したがって、配列がソートされているかどうかは関係ありません。

注:私はIndexOfのソースコードを読んでいません。配列のソートが検出された場合、バイナリ検索を使用することがあります。これは私の推測です。

関連する問題