2017-04-11 2 views
0

Ich habe die binarySearch-Methode auf einem int [] -Array verwendet, um den Offset eines bestimmten int-Wertes zu finden, aber manchmal funktioniert es gut und andere Male es wirft zurück eine negative Zahl.Java Array binäre Suche - negative Ausgabe, will nicht sortieren

In anderen Fragen wird vorgeschlagen, dass ich zuerst das Array sortiere, aber ich möchte dies nicht so machen, wie es in der Reihenfolge ist, in der sie sich befinden.

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

Ich finde es seltsam, dass dies in einigen Fällen funktioniert und in anderen nicht, im Fall der anderen kann ich Ihnen das int-Wert im Array gewährleisten! Vorschläge?

Hier einige Konsolenausgabe aus dem Programm:

Possible flags: 26317584 
Current flag: 6 
Index of last point: 6 -7 
+3

Ähm, Sie können die binäre Suche für ein Array nicht verwenden, das nicht sortiert ist. Wenn Sie nicht sortieren möchten, müssen Sie die Elemente einzeln überprüfen. – TomekK

+0

liefern Sie die Beispielwerte, wo es nicht funktioniert und Ihren vollständigen Code. –

+0

Die binäre Suche funktioniert, indem man zuerst zum Median des Arrays geht und sagt, die Zahl, nach der ich suche, ist entweder mehr oder weniger als diese Zahl. Wenn der Suchparameter größer als der Median ist, tut er das gleiche für die rechte Hälfte des Arrays und so weiter. Der Grund dafür, dass Sie -1 erhalten, ist, dass es nicht gefunden werden kann, da der Algorithmus ein sortiertes Array benötigt. Die einzige Möglichkeit, ein unsortiertes Array zu durchsuchen, dauert 0 (N), also benutzen Sie einfach eine for-Schleife, um nach ihr zu suchen oder die '.contains()' Methode –

Antwort

0

Arrays.sort() Methode verwendet man wirklich Art muss es zuerst

, wenn Sie die Nummer nur finden Sie Looping

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

Das Hauptkriterium der binären Suche ist, dass Ihr Array sortiert werden muss. Wenn Sie also binarySearch verwenden möchten, um ein Element zu finden, müssen Sie ein sortiertes Array bereitstellen. Und wenn Sie das Array nicht sortieren möchten, können Sie stattdessen linear search verwenden