Реализация двоичного поиска на C#
Простенькая реализация, которая может искать элементы в любом массиве, реализующем интерфейс IComparable<T>. При нахождении элемента возвращает его индекс. Если элемент отсутствует возвращает null. Поиск не рекурсивный. С рекурсивным были проблемы на больших массивах. Массив с 10 000 элементов выкидывал StackOverflowException.
static int? Search<T>(T[] array, int left, int right, T key) where T : IComparable<T>
{
while (right >= left)
{
int middle = (left + right) / 2;
int comp = array[middle].CompareTo(key);
if (comp > 0)
{
right = middle - 1;
}
else if (comp < 0)
{
left = middle + 1;
}
else
{
return middle;
}
}
return null;
}
Комментариев нет:
Отправить комментарий