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

...zur Antwort