Реализация двоичного поиска на 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; }
Комментариев нет:
Отправить комментарий