Поиск индекса значения в массиве 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 и всё. Даже работать быстрее будет.
