Menu
Coddy logo textTech

Binäre Suche

Zuletzt aktualisiert

Die binäre Suche findet einen Zielwert in einem **sortierten** Array, indem sie das Suchfenster wiederholt halbiert. Sie vergleicht das mittlere Element mit dem Ziel: Bei einem Treffer endet die Suche; andernfalls wird die Hälfte verworfen, die das Ziel nicht enthalten kann, und das Fenster schrumpft auf die andere Hälfte. Jeder Vergleich eliminiert die Hälfte der verbleibenden Elemente — deshalb läuft sie in O(log n): Die Suche in einer Million sortierter Werte braucht höchstens etwa 20 Vergleiche.

Die Animation oben zeigt die Zeiger lo, mid und hi und blendet nach jedem Vergleich die eliminierte Hälfte aus. Die eine unverhandelbare Voraussetzung: Das Array muss bereits sortiert sein — bei unsortierten Daten brauchst du die lineare Suche oder zuerst ein Sortierverfahren (siehe Merge Sort). Dieselbe Halbierungsidee steckt auch im binären Suchbaum.

Zeit- und Platzkomplexität

FallKomplexitätAnmerkungen
Bester FallO(1)Das mittlere Element ist beim ersten Vergleich das Ziel.
Durchschnittlicher FallO(log n)Jeder Vergleich halbiert das verbleibende Fenster.
Schlechtester FallO(log n)Das Fenster schrumpft auf ein einziges Element, bevor es zum Treffer oder Fehlschlag kommt.
PlatzO(1)Die iterative Version hält nur die Indizes lo, hi und mid.

Schritt für Schritt

SchrittWas passiert
1Setze lo auf den ersten und hi auf den letzten Index des sortierten Arrays.
2Berechne den mittleren Index: mid = (lo + hi) // 2.
3Wenn a[mid] gleich dem Ziel ist, gib mid zurück — gefunden.
4Wenn a[mid] **kleiner** als das Ziel ist, kann das Ziel nur in der rechten Hälfte liegen: setze lo = mid + 1.
5Wenn a[mid] **größer** als das Ziel ist, durchsuche die linke Hälfte: setze hi = mid - 1.
6Wiederhole ab Schritt 2, solange lo <= hi gilt; wird das Fenster leer, ist das Ziel nicht im Array.

Durchgerechnetes Beispiel

Suche nach 5 in [1, 2, 3, 5, 7, 8, 9]:

DurchlaufFenster (lo..hi)mida[mid]Aktion
1[1, 2, 3, 5, 7, 8, 9] (0..6)35a[3] = 5 — Ziel bei Index 3 gefunden.

Ein Fehlschlag, Schritt für Schritt

Die Suche nach 4 im selben Array zeigt, wie das Fenster leer wird:

DurchlaufFenster (lo..hi)mida[mid]Aktion
10..6355 > 4 — durchsuche die linke Hälfte, hi = 2.
20..2122 < 4 — durchsuche die rechte Hälfte, lo = 2.
32..2233 < 4lo wird 3, das Fenster ist leer: nicht gefunden.

Wann die binäre Suche verwenden

Verwenden, wennVermeiden, wenn
Die Daten bereits sortiert sind (oder du sie viele Male durchsuchst)Die Daten unsortiert sind und nur einmal durchsucht werden — vorheriges Sortieren kostet O(n log n)
Die Sammlung schnellen wahlfreien Zugriff erlaubt (Arrays)Du nur sequenziellen Zugriff hast (verkettete Listen)
Der Datensatz groß ist — O(log n) glänzt bei großem MaßstabDer Datensatz winzig ist — ein einfacher Durchlauf ist genauso schnell und simpler

Binary Search-Code

Eine saubere, lauffähige Binary Search-Implementierung in Python, JavaScript, Java, C++, C, Pseudocode. Wähle eine Sprache, kopiere den Code oder öffne ihn vorgeladen im Coddy-Playground.

Binary Search-Code in Python

Python
1def binary_search(a, target):2    lo, hi = 0, len(a) - 13    while lo <= hi:4        mid = (lo + hi) // 25        if a[mid] == target:6            return mid7        if a[mid] < target:8            lo = mid + 1  # search the right half9        else:10            hi = mid - 1  # search the left half11    return -112
13
14nums = [1, 2, 3, 5, 7, 8, 9]  # must be sorted15print("Index of 5:", binary_search(nums, 5))16print("Index of 4:", binary_search(nums, 4))
Führe diesen Code im Python-Playground aus

FAQ zur binären Suche

Was ist die Zeitkomplexität der binären Suche?
O(log n) im durchschnittlichen und im schlechtesten Fall, weil jeder Vergleich das verbleibende Suchfenster halbiert, und O(1) im besten Fall, wenn das erste mittlere Element das Ziel ist. Die iterative Version benötigt O(1) zusätzlichen Platz.
Warum braucht die binäre Suche ein sortiertes Array?
Der Halbierungsschritt beruht auf der Ordnung: Der Vergleich des Ziels mit dem mittleren Element verrät nur dann, welche Hälfte zu verwerfen ist, wenn alles links der Mitte kleiner und alles rechts davon größer ist. Bei unsortierten Daten ist dieser Schluss ungültig — nutze stattdessen die lineare Suche oder sortiere zuerst.
Was ist der Unterschied zwischen binärer Suche und linearer Suche?
Die lineare Suche prüft die Elemente eines nach dem anderen (O(n)) und funktioniert mit jedem Array; die binäre Suche halbiert das Suchfenster eines sortierten Arrays (O(log n)), verlangt aber sortierte Eingaben. Bei einer Handvoll Elemente ist der Unterschied vernachlässigbar — bei großem Maßstab gewinnt die binäre Suche deutlich.
Wie viele Vergleiche braucht die binäre Suche?
Höchstens etwa log2(n) + 1: 10 Vergleiche decken 1.000 Elemente ab, 20 Vergleiche 1.000.000. Dieses logarithmische Wachstum macht sie zum Standard-Lookup auf sortierten Daten.
Was ist der klassische Überlauf-Bug in der binären Suche?
Die Mitte als (lo + hi) / 2 zu berechnen kann bei Ganzzahlen fester Größe überlaufen, wenn lo + hi das Maximum des Typs überschreitet. Die sichere Form ist mid = lo + (hi - lo) / 2. In Python spielt das keine Rolle (Ganzzahlen mit beliebiger Genauigkeit), aber in Java/C/C++ ist es ein echter, berühmter Bug.
Ist die binäre Suche dasselbe wie ein binärer Suchbaum?
Sie teilen die Halbierungsidee, unterscheiden sich aber in der Struktur: Die binäre Suche ist ein Algorithmus auf einem sortierten Array, während ein binärer Suchbaum eine verkettete Datenstruktur ist, die ihre Schlüssel geordnet hält, sodass Suchvorgänge an jedem Knoten nach links oder rechts absteigen.
Coddy programming languages illustration

Meistere Algorithmen mit Coddy

LOS GEHT'S