Поиск индекса значения в массиве ulong[]

В методе нужно реализовать поиск индекса по value. Я написал код, здесь 5 тестов зеленые, 3 красных. В каком месте чего не хватает... не пойму. Через бинарный поиск и сортировку массива пытаюсь реализовать.

        public static int GetIndexOf(this ulong[] arrayToSearch, ulong value)
        {
            if (arrayToSearch is null)
            {
                throw new ArgumentNullException(nameof(arrayToSearch));
            }

            int idx = 0;
            int low = 0; // low
            int high = arrayToSearch.Length - 1; // high

            Array.Sort(arrayToSearch); // сортировка массива

            do
            {
                int mid = (low + high) / 2;
                ulong guess = arrayToSearch[mid];
                if (guess == value) // если guess == искомому значению (value)
                {
                    return mid;
                }

                if (guess > value)
                {
                    high = mid - 1;
                }
                else
                {
                    low = mid + 1;
                }

                idx++;
            }
            while (idx <= arrayToSearch.Length - 1);

            return -1;
        }

Вот сам вывод тестов: введите сюда описание изображения


Изменил код. 6 тестов зеленые 2 красных

 public static int GetIndexOf(this ulong[] arrayToSearch, ulong value)
        {
            if (arrayToSearch is null)
            {
                throw new ArgumentNullException(nameof(arrayToSearch));
            }

            if (arrayToSearch.Length == 0)
            {
                return -1;
            }

            Array.Sort(arrayToSearch); // сортировка массива
            int idx = 0;
            int low = 0; // low
            int high = arrayToSearch.Length - 1; // high
            do
            {
                int mid = (low + high) / 2;
                ulong guess = arrayToSearch[mid];
                if (guess == value) // если guess == искомому значению (value)
                {
                    return mid;
                }

                if (guess > value)
                {
                    high = mid - 1;
                }
                else
                {
                    low = mid + 1;
                }

                idx++;
            }
            while (idx <= arrayToSearch.Length - 1);

            return -1;
        }


Ответы (1 шт):

Автор решения: Qwertiy

Сделай по-человечески обычным циклом for и всё. Даже работать быстрее будет.

→ Ссылка