пятница, 22 июня 2012 г.

Двоичный поиск на C#

Реализация двоичного поиска на 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;
        }

Комментариев нет:

Отправить комментарий