2016-06-09 3 views
-1

Ich habe ein Programm geschrieben, das nach einem String in einem sortierten Array von Strings sucht. Mein Programm funktioniert gut außer für die Zeiten, wenn leere Strings in meinem Array sind. Unten ist der Code:Suche eine gegebene Zeichenfolge in einem sortierten Array von Strings in Java

public class StringSearch { 

public static int binarySearchString(String[] s, String search) 
{ 

    int low = 0; 
    int high = s.length-1; 
    int mid; 

    while(low<=high) 
    { mid = (high+low)/2; 
     if(search.compareTo(s[mid])<0) 
      high = mid-1; 
     else if(search.compareTo(s[mid])>0) 
      low = mid+1; 
     else 
      return mid; 

    } 
    return -1; 

} 
public static void main(String[] args) 
{ 

    String[] str = {"abc", "", "def", "ijk", "mnop", "xyz"}; 
    String toSearch = new String("ijk"); 
    int result = binarySearchString(str, toSearch); 
     if(result == -1) 
      System.out.println("String not found!!"); 
     else 
      System.out.println("String found at array index:" + result); 
} 

} 

Wo mache ich einen Fehler?

+1

Binäre Suche funktioniert nicht mit Arrays, die nicht sortiert sind. – MikeCAT

+1

Bitte erläutern Sie, was Sie mit _ "außer den Zeiten, wenn es leere Zeichenfolgen gibt" _. Was geschieht? Wenn das Array sortiert ist, wo sind die leeren Zeichenfolgen? Wie hast du das Array sortiert? –

+1

Techincalally wird nicht sortiert, wenn dort eine leere Schnur zufällig dort ist ... – 3kings

Antwort

1

Ihr Array ist nicht wirklich sortiert: Der leere String sollte zuerst im Array kommen.

Allerdings sollte Ihr Testfall von "ijk" immer noch so funktionieren, wie es nach dem Mittelpunkt ist, so dass der unsortierte Abschnitt des Arrays vermieden wird.

Also lief ich Ihren Code und es gibt richtig

String found at array index:3 

Es ist nicht bei der Suche nach „“ funktioniert.

Fügen Sie Arrays.sort(str) vor dem Anruf hinzu binarySearchString.

+0

Mein Schlechtes :(Thanks – BKodwani

Verwandte Themen