A continuación se encuentra mi Búsqueda binaria genérica. Funciona bien con la matriz de tipos enteros (encuentra todos los elementos en ella). Pero el problema surge cuando uso una matriz de cadenas para encontrar cualquier dato de cadena. Corre bien para el primer índice y los últimos elementos del índice, pero no puedo encontrar los elementos del medio.Búsqueda binaria genérica en 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");
}
}
}
Si esto no es tarea, usted debe usar 'Array.BinarySearch'. Si es así, debe etiquetarlo como tal. Además, debes aceptar las respuestas a tus preguntas. – SLaks
¿Hay alguna razón por la que no pueda usar [Array.BinarySearch] (http://msdn.microsoft.com/en-us/library/system.array.binarysearch.aspx)? –
No, no hay motivos para no usar Array.BinarySearch. quiero saber cómo funcionan las cosas en la parte posterior de ese método. así que al hacerlo estoy trabajando en esto. –