Unten ist meine generische binäre Suche. Es funktioniert mit dem Integer-Array (es findet alle Elemente darin). Aber das Problem tritt auf, wenn ich ein String-Array verwende, um irgendwelche String-Daten zu finden. Es läuft okay für den ersten Index und die letzten Indexelemente, aber ich kann die mittleren Elemente nicht finden.
%Vor%Eine binäre Suche erfordert, dass die Eingabe sortiert wird . Wie wird "b, a, ab, abc, c" sortiert? Es scheint nicht nach einem offensichtlichen Sortierschlüssel sortiert zu sein. Wenn Sie versuchen, unsortierte Daten zu durchsuchen, sollten Sie einen Hash-Satz verwenden, keine binäre Suche in einer Liste.
Auch Ihre Berechnung des Mittelpunkts ist subtil falsch, weil die Addition von high + low überlaufen kann. Es wird dann eine negative Zahl, die durch zwei geteilt wird.
Dies ist für Arrays mit realistischer Größe äußerst unwahrscheinlich, aber es ist durchaus möglich, dass Sie diesen Algorithmus eines Tages für Datentypen verwenden möchten, die die Indizierung mit großen Ganzzahlen unterstützen, z. B. eine Speicherabbilddatei mit sortierten Daten.
Der beste Weg, um einen binären Suchalgorithmus zu schreiben, ist (high - low) / 2 + low
bei der Berechnung des Mittelpunkts, weil dieser die ganze Zeit in Reichweite bleibt.
Die zwei Zeilen sind verdächtig:
%Vor%Hmm. Sehen Sie sich die Offsets an. Natürlich ist dies ein gut dokumentierter Binärer Suchalgorithmus auf Wikipedia. Sie machen auch zusätzliche Arbeit. Untersuchen Sie den Pseudocode und die Beispiele genau.