2017-04-11 16 views
0

int []配列のbinarySearchメソッドを使用して特定のint値のオフセットを検索していますが、負の数です。Java配列のバイナリ検索 - 負の出力で、ソートしたくない場合

他の質問では、最初に配列を並べ替えることをお勧めしますが、配列を保持する必要があるため、これを実行したくありません。私はそれが奇妙な、これはいくつかのケースで動作し、他の人に、他人の場合には、私はint型の値が配列であるを保証することができないことがわかり

System.out.println("Index of last point: "+validFlag+" "+Arrays.binarySearch(validFlags,validFlag)); 

! 提案?ここで

は、プログラムからいくつかのコンソール出力です:

は、Arrays.sort()メソッドを使用して
Possible flags: 26317584 
Current flag: 6 
Index of last point: 6 -7 
+3

Um、ソートされていない配列に対してバイナリ検索は使用できません。ソートしたくない場合は、要素を1つずつチェックする必要があります。 – TomekK

+0

は、動作しないサンプル値と完全なコードを提供します。 –

+0

バイナリー検索は、最初に配列の中央値に行き、探している番号がこの数よりも多いか小さいかをいいます。検索パラメータが中央値より大きい場合は、配列の右半分に同じことを行います。アルゴリズムがソートされた配列を必要とするため、-1が得られるのは、それが見つからないためです。ソートされていない配列を検索する唯一の方法は、O(N)時間かかるので、forループまたは '.contains()'メソッドを探すだけです。 –

答えて

0

あなたはちょうどあなたが

をループ使用できる番号を検索したい場合は、あなたが本当に最初

並べ替える必要があります

for(int i=0;i<values.length;++i) 
    { 
     if(myNumber==values[i]) 
     { 
     i=values.length; 
     foundValue=true; 
     } 
    } 
0

バイナリ検索の主な基準は、配列をソートする必要があることです。したがって、binarySearchを使用して要素を検索する場合は、ソートされた配列を指定する必要があります。配列をソートしたくない場合は、代わりにlinear searchを使用できます。

関連する問題