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 ?
Danke schon mal für die Antwort.
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.