Antwort
Den Algorithmus musst Du Dir nicht selbst erschließen; Implementierungen der binären Suche findest Du im Internet, z. B. www.geeksforgeeks.org.
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String args[]) {
// Liste der Quadratzahlen generieren
int[] quadratZahlen = new int[25000];
for(int i = 0; i < 25000; i++) {
quadratZahlen[i] = (int) Math.pow(i, 2);
}
// Wurzel finden mittels binärer Suche
int zahl = 15129;
int wurzel = binaereSuche(quadratZahlen, zahl);
if(wurzel == -1) {
System.out.println(zahl + " ist keine Quadratzahl.");
} else {
System.out.println("Die Wurzel von " + zahl + " ist " + wurzel + ".");
}
}
// Implementierung des Algorithmus nach https://www.geeksforgeeks.org/binary-search/
// gibt Index von x in arr[] (= entspricht der Wurzel) zurück, falls vorhanden
public static int binaereSuche(int arr[], int x) {
int l = 0, r = arr.length - 1;
while(l <= r) {
int m = l + (r - l) / 2;
// prüfen, ob x in der Mitte liegt
if(arr[m] == x) {
return m;
}
if(arr[m] < x) {
// wenn x größer ist, linke Hälfte ignorieren
l = m + 1;
} else {
// wenn x kleiner ist, rechte Hälfte ignorieren
r = m - 1;
}
}
// x ist nicht in arr[] vorhanden, d. h. keine Quadratzahl
return -1;
}
}
Hierzu ein Erklärvideo zur Funktionsweise der binären Suche:
https://www.youtube.com/watch?v=XJUgCSejezQ