2017-08-27 4 views
2

Ist dies eine gute Implementierung des binären Suchalgorithmus? Es funktioniert, aber es ist eine Implementierung, die ich entwickelt habe und die sich von meinen Lehrern unterscheidet. Kann jemand mir ein Loch in das Loch schlagen?Java: Binäre Suche

package algorithm.linearsearch; 

public class Binary {

public static void main(String[] args) { 
    System.out.println(binarySearch(
      new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 26, 109, 1001, 1100 }, 
      26)); 

} 

private static int binarySearch(int[] array, int target) { 
    int p = 0; 
    int r = array.length - 1; 
    int q; 

    while (p <= r) { 
     q = (p + r)/2; 
     if (array[q] == target) { 
      System.out.println("value: " + array[q]); 
      return q; 
     } 
     if (array[q] > target) { 
      r = q + 1; 
     } else { 
      p = q - 1; 
     } 

    } 

    return -1; 

} 

}

+0

Was war die Implementierung Ihres Lehrers? – Ravi

+1

Sie können auch binarySearch mit rekursiven Algo versuchen. – nagendra547

+1

Es klingt, als würden Sie nach einem * [Code-Review] (https://codereview.stackexchange.com/) * fragen. – ray

Antwort

1

Nur soviel

if (array[q] > target) { 
    r = q + 1; 
} else { 
    p = q - 1; 
} 

sollte

if (array[q] > target) { 
    r = q - 1; // index lower to current pivot 
} else { 
    p = q + 1; // index upper to current pivot 
} 
+0

@nullpointer Sie verpasst Chance von Nullzeiger. Von allen Leuten solltest du es nicht als seinen Benutzernamen vermissen: D –

1

Eine Sache, die ich sagen kann. Es wird erwartet, dass Ihr Programm den Index zurückgibt, wenn es gefunden wird, oder -1 zurückgibt, wenn es nicht gefunden wird. Sie müssen den Wert also nicht als Eingabe des Benutzers für das zu suchende Element ausgeben.

Sie benötigen zunächst eine Überprüfung, wenn Ihr Array Null ist, geben Sie -1 zurück, um eine Nullzeigerausnahme zu vermeiden, die bei der Berechnung der Arraylänge auftritt.