Binäre-Suche bei unsortierten Daten


slitec

Grünschnabel
#1
Hallo.

Ich habe mir überlegt ob es möglich wäre, eine Binäre-Suche auch bei unsortierten Daten durchzuführen.

Ich habe hier mal folgendes programmiert. Leider funktioniert hier nur die Binäre suche bei sortierten Daten. Ist es überhaupt möglich hier mit der Binären-Suche eine Zahl in den unsortierten Daten zu finden? Gibt es also eine Möglichkeit, in der Methode suchzeitBinaer() eine weitere if-Abfrage zu schreiben, sodass bei unsortierten Daten auf beiden Seiten gesucht wird ?

Java:
package A1;
import java.util.Random;


 public class BinaereSuche
{
     int[] liste = new int[100]; //Array mit 100 Plätzen
     Random zufall = new Random();    // wird erzeugt für Klasse erzeugenUnsortiert()
     int n = 0;      // Anzahl der Suchschritte
     int suchzahl = 0; //Dies ist die gesuchte Zahl
     int links = 0; // linker Index
     int rechts = 99; // rechter Index         
    
     public BinaereSuche() {
        
     }
    
     // --> Sortiert
     public void erzeugeSortiert() {
            for (int i=0; i<liste.length; i++) {
            //100 Zahlen werden erzeugt
                liste[i] = i;   
            //Enthält zahlen von 1-100
            }
        }
    
     // --> Unsortiert
     public void erzeugenUnsortiert() {
            for (int i=0; i<liste.length; i++){
                int z1 = zufall.nextInt(100);
                for (int z = 0; z < i; z++) {
                    if (z1 == liste[z]) {
                        i--;
                        z=100;
                    }else{
                        liste[i] = z1;
                    }
                }
            }
        }
    
    
        public void ausgabe() {
            for (int i=0; i<liste.length; i++) {
                System.out.println(liste[i] + " || Schritt: " + (i+1));
            }
        }
        
        
        public int suchzeitBinaer(int suchzahl) {
            
            int mitte;
            do {
                mitte = (links+rechts)/2;
                n++;
                System.out.println(mitte+" Schritte: " +n);
                
                if (liste[mitte] == suchzahl) {
                    System.out.println("Suchzahl: " + mitte);
                    return mitte;
                }
                if (liste[mitte] > suchzahl) {
                    rechts = mitte-1;
                }
                if (liste[mitte] < suchzahl) {
                    links = mitte+1;
                }
                
            } while (links <= rechts && liste[mitte] != suchzahl);
            System.out.println("Zahl nicht gefunden");
            return -1;
            
            }
        
        
        }
                
        
    
    public static void main(String[] args)
    {
    
    BinaereSuche b1 = new BinaereSuche();
    //b1.erzeugeSortiert();
    b1.erzeugenUnsortiert();
    b1.suchzeitBinaer(12);
    
    }
}
Danke schon mal für die Antwort.
 

Neue Beiträge