Помогите пожалуйста реализовать бинарный поиск на языке C#
l = -1; u = n while l 1 != u m = (l u) /2 /* целочисленное деление */ if x[m] < t l = m else u = m p = u if p >= n || x[p] != t p = -1
Выше приведён пример наиболее часто реализуемого варианта бинарного поиска на псевдокоде, чисто что б Вы уловили суть алгоритма.
Вот код рекурсивной реализации бинарного поиска на C#:
public static (bool, int) BinarySearch (T[] sorted_values, int value, bool descending = false) where T : IComparable { (bool, int) SearchOnRange (int left, int right) { if (left >= right) return (False, left); if (sorted_values[left] == value) return (True, left); int middle = left (right - left) / 2; if (sorted_values[middle] == value) return middle == left 1 ? (True, middle) : SearchOnRange(left, middle 1); return (sorted_values[middle] < value) == descending ? SearchOnRange(left, middle) : SearchOnRange(middle 1, right); } return SearchOnRange(0, sorted_values.Length()); }