Generische binäre Suche in C #

8

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%     
Pro_Zeck 18.10.2010, 23:38
quelle

4 Antworten

21

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.

    
Eric Lippert 19.10.2010 00:07
quelle
1

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.

    
user166390 18.10.2010 23:45
quelle
1

pst Ihr Rat hat wirklich funktioniert. :) Dieser Code funktioniert sowohl für int als auch für String.

%Vor%     
Pro_Zeck 19.10.2010 01:11
quelle
1

// Binäre rekursive Suchmethode

%Vor%     
Enigmatic Mind 29.12.2013 11:45
quelle

Tags und Links