2010-09-09 15 views
6
String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"}; 

// Search for the word "cat" 
int index = Arrays.binarySearch(sortedArray, "Quality"); 

Ich bekomme immer -3. Problem ist in "Name". Warum kann ich nicht "Name" in meinem Array haben? Irgendeine Idee?java Arrays.binarySearch kann das Ziel nicht finden

+1

"Name" sollte vor "Qualität" sein, und "Paket" sollte vor "Testing" sein. –

+1

binarySearch ist nur für sortierte Array. –

+0

@Jon, ich denke du meintest, dass "Paket" sollte vor "Qualität" kommen. –

Antwort

23

Um binarySearch zu verwenden, müssen Sie das Array selbst zuerst sortieren:

String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"}; 

java.util.Arrays.sort(sortedArray); 

int index = Arrays.binarySearch(sortedArray, "Quality"); 
+0

thx alle für schnelle Hilfe – user437630

+0

@senzacionale, Gern geschehen. –

6

Das Array muss sortiert werden. Von Javadoc von binarysearch():

Der Bereich muss in aufsteigender Reihenfolge sortiert werden nach der natürlichen Ordnung ihrer Elemente vor diesem Aufruf zu machen. Wenn es nicht sortiert ist, sind die Ergebnisse nicht definiert.

1

Ein Array sortiert werden müssen, für die binäre Suche zu arbeiten. Die Javadoc binarySearch sagt dies:

Das Array muss nach seinen Elementen der natürlichen Reihenfolge in aufsteigender Reihenfolge sortiert werden (wie durch die sort (Object []) -Methode) vor diesem Anruf zu machen. Wenn es nicht sortiert ist, sind die Ergebnisse nicht definiert.

(Hervorhebung hinzugefügt.)

Und der Grund ist einfach. Die Binärsuche Algorithmus hat eine Vorbedingung, dass das Eingabearray sortiert ist.