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 die ersten Index- und letzten Indexelemente, aber ich kann die mittleren Elemente nicht finden.Generische binäre Suche in C#
Stringarray = new string[] { "b", "a", "ab", "abc", "c" };
public static void BinarySearch<T>(T[] array, T searchFor, Comparer<T> comparer) {
int high, low, mid;
high = array.Length - 1;
low = 0;
if (array[0].Equals(searchFor))
Console.WriteLine("Value {0} Found At Index {1}",array[0],0);
else if (array[high].Equals(searchFor))
Console.WriteLine("Value {0} Found At Index {1}", array[high], high);
else
{
while (low <= high)
{
mid = (high + low)/2;
if (comparer.Compare(array[mid], searchFor) == 0)
{
Console.WriteLine("Value {0} Found At Index {1}", array[mid], mid);
break;
}
else
{
if (comparer.Compare(searchFor, array[mid]) > 0)
high = mid + 1;
else
low = mid + 1;
}
}
if (low > high)
{
Console.WriteLine("Value Not Found In the Collection");
}
}
}
Ist dies nicht Hausaufgaben, sollten Sie 'Array.BinarySearch' verwenden. Wenn dies der Fall ist, sollten Sie es als solches markieren. Außerdem sollten Sie Antworten auf Ihre Fragen akzeptieren. – SLaks
Gibt es einen Grund, warum Sie [Array.BinarySearch] (http://msdn.microsoft.com/en-us/library/system.array.binarysearch.aspx) nicht einfach verwenden können? –
Nein, es gibt keine Gründe für die Verwendung von Array.BinarySearch. Ich möchte wissen, wie die Dinge auf der Rückseite dieser Methode funktionieren. damit arbeite ich daran. –