Rekursive Binärsuche

  • Themenstarter Themenstarter markus
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
M

markus

Gast
Code:
public class binsuche2 {
  static final int N = 10;
  static int[] a = { -1, 2, 7, 8, 12, 13, 15, 26, 66, 77, 92 };
  static int zahl = 15; // zu suchende Zahl
//  static int left = 1;
//  static int right = N+1;


  private static int suche(int a[], int zahl, int start, int end)
        {
                int posi = -1;
                if (start < end) {
                        int middle = (start + end) / 2;
                        if (zahl > a[middle]) {
                                suche(a, zahl, middle + 1, end);
                        }
                        else if (zahl < a[middle]) {
                                suche(a, zahl, start, middle - 1);
                        }
                        else {
                                posi = middle;
                        }
                }
                return (posi);

        }

  static void ausgabe() {
    System.out.print("Daten:\n");
    for(int i=1; i<=N; i++) {
      System.out.print(" "+ a[i]);
    }
    System.out.print("\n");
  }

  public static void main(String[] args) {
    // ausgabe();
    int sucheabc = suche(a, zahl, 0, 10);
    if (sucheabc==-1) {
      System.out.print(zahl +" wurde nicht gefunden");
    }
    else {
      System.out.print(zahl +" wurde gefunden beim Index:"+ sucheabc);
    }
  }

}

Irgendwie gibt das viech jedes mal als posi "-1" aus , bzw zahl nicht gefunden. ...

Hab wohl irgendwo nen krassen Denkfehler .. habs leider nicht ganz so mit Java , und unser Informatiklehrer hilft nur den cracks die eigentlich keine hilfe bräuchten

von daher vielen dank für eure hilfe 🙂 !
 
Update : hab jetzt vor der suche ()

immer noch ein "posi = suche ..." geschrieben :

" posi = suche(a, zahl, start, middle - 1);" usw

zudem habe ich "start" als "1" gesetzt ... jetzt findet er alle zahlen in a[] außer "2"
 
OKay dann sorry fürs stören 🙂 ... aber evtl hilft es ja anderen ...


habe nun
" int sucheabc = suche(a, zahl, 1, a.length);"

statt "10" @ a.length , das war quasi einer zu wenig wie ich nachher gesehen hab 🙂
 
ooookay ...

ich könnte mich erschießen *account zuleg nur um editieren zu können*
-------

Einige Zahlen findet er immer noch nicht , wie "7" oder "66" .. "13" auch nicht

-------

irgendwie haut das mit dem runden (start + end / 2 ) nicht so geil hin ... dadurch findet der manche zahlen irgendwie nicht ...

weiß er rat ? vielen dank 🙂
 
kanns einfach.

Mach deine Variable posi nicht lokal in der Methode sondern deklariere sie auch als Klassenvariable 🙂
 
deathbyaclown hat gesagt.:
kanns einfach.

Mach deine Variable posi nicht lokal in der Methode sondern deklariere sie auch als Klassenvariable 🙂

das löst leider nicht das problem , dass er 77 nicht findet
 
ups, genau das wollte ich dir nocht schreiben:

zum einen:
Code:
else if (zahl < n) {
	suche(zahl, start, middle);
}

und
Code:
int sucheabc = suche(a[i], 0, a.length);

achja habe in der methode suchen den array nicht als parameter übergeben, da er ja ne Klassenvariable ist....
zum anderen habe ich suche(a....) geschrieben, da ich mal über den ganzen array gelaufen bin und schaute ob er alle richtig findet
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben