Easy Coding
  Forum Wiki Tagging Projekte Karte RSS
» Start
» All Recent Changes
» Wiki Suche
» Wiki Hilfe

Algorithmen

How To's Informationen

edit SideBar

Neue Wiki Eintrage finden Sie unter easy-coding.de/wiki.

Binäre Suche

Die binäre Suche liefert in einem Array recht schnell das gesuchte Element bzw. eine zuverlässige Aussage über das Fehlen dieses Elementes. Voraussetzung ist, dass die Elemente des Array in einer dem Suchbegriff entsprechenden Weise vorsortiert sind. Der Algorithmus basiert auf dem Schema Teile und Herrsche?.

Algorithmus

Zuerst wird das mittlere Element des Arrays überprüft. Es kann kleiner, größer oder gleich dem gesuchten Element sein. Ist es kleiner als das gesuchte Element, muss das gesuchte Element in der hinteren Hälfte stecken, falls es sich dort überhaupt befindet. Ist es hingegen größer, muss nur in der vorderen Hälfte weitergesucht werden. Die jeweils andere Hälfte muss nicht mehr betrachtet werden. Ist es gleich dem gesuchten Element, ist die Suche (vorzeitig) beendet.

Jede weiterhin zu untersuchende Hälfte wird wieder gleich behandelt: Das mittlere Element liefert wieder die Entscheidung darüber, wo bzw. ob weitergesucht werden muss.

Die Länge des Suchbereiches wird von Schritt zu Schritt halbiert. Spätestens wenn der Suchbereich auf 1 Element geschrumpft ist, ist die Suche beendet. Dieses eine Element ist entweder das gesuchte Element, oder das gesuchte Element kommt nicht vor.

Der Algorithmus zur binären Suche wird entweder iterativ oder als Rekursion implementiert.

Beispiel

binaere-suche.java
  1. public final class BinaereSuche {
  2.  
  3.     public static int suche(final char zeichen, final char[] alphabet) {
  4.         int ergebnis = -1;
  5.         int erstes = 0;
  6.         int letztes = alphabet.length - 1;
  7.  
  8.         while (erstes <= letztes && ergebnis < 0) {
  9.             int mitte = erstes + ((letztes - erstes) / 2);
  10.             if (alphabet[mitte] < zeichen)
  11.                 erstes = mitte + 1// rechts weitersuchen
  12.             else if (alphabet[mitte] > zeichen)
  13.                 letztes = mitte - 1// links weitersuchen
  14.             else
  15.                 ergebnis = mitte;  // Zeichen gefunden
  16.         }
  17.  
  18.         return ergebnis;
  19.     }
  20.  
  21. }
Zuletzt geändert am 27.09.2006 21:20 Uhr
  Impressum