2017-12-28 5 views
-3

So mache ich eine binäre Suche auf einem Array. Aber etwas zu sein. Es gibt -1 zurück, als ob das Ziel nicht gefunden wird, aber es befindet sich im Array. ab: wenn ich den Schlüssel bei 555 gesetzt gibt es den richtigen Index, aber wenn ich mit dem Beispiel unten versuchen, mit 8 es -1 zurück ..binäre Suche auf einem Array mit Fehlern

public class bSearch { 

    public static void main(String[] args) { 
     int[] nums = {9,5,2,5,7,8,3,22,555}; 
     int key = 8; 

     System.out.println(searchForNum(nums,0,nums.length-1,key)); 
    } 

    private static int searchForNum(int[] arr,int first, int last, final int target) { 
     int middle= (first+last)/2; 

     if(last < first) { 
      return -1; 
     } 

     if(arr[middle]== target) 
      return middle; 
     else if(target < arr[middle]) { 
      return searchForNum(arr,first,middle-1,target); 
     } else { 
      return searchForNum(arr,middle+1,last,target); 
     } 
    } 

} 
+2

Haben Sie Schritt durch den Code in Ihrem IDE-Debugger? –

+0

Eine binäre Suche funktioniert nur, wenn Ihre Liste/Array sortiert ist, andernfalls nicht. –

Antwort

11

Der Grund, warum binäre Suche funktioniert, ist, dass das Suchintervall ist bestellt. Sie übergeben ein ungeordnetes Intervall, das zu Suchfehlern führt.

Anruf Arrays.sort auf Ihrem Datenfeld vor der Suche:

int[] nums = {9,5,2,5,7,8,3,22,555}; 
Arrays.sort(nums); 
+0

ahhh ja! komplett vergessen. Vielen Dank! – rjimenez52

0

Sie nicht ohne Sortieren die Liste/Array binären Such tun können, die Sie auf es für mehr

bitte diese lesen suchen mögen info binary-search.

Sie verändert Ihre main Methode sein müssen

public static void main(String[] args) { 
     int[] nums = {9,5,2,5,7,8,3,22,555}; 
     int key = 8; 
     Arrays.sort(nums); // sort the array 
     System.out.println(searchForNum(nums,0,nums.length-1,key)); 
    }