Я схожу с ума или это ошибка в C#? - PullRequest
0 голосов
/ 27 января 2020
public static void Main()
{

    int[] nums = new int[] {1,0,1,2,3};     
    int k = Array.BinarySearch<int>(nums, 0);
    Console.WriteLine(k);
}

Почему бинарный поиск 0 в массиве int [] возвращает -1 вместо индекса, где 0 находится в?

Ответы [ 2 ]

2 голосов
/ 27 января 2020

BinarySearch работает, только если элементы в порядке.

Поиск всего одномерного отсортированного массива для указанного c элемента ...

Вместо этого можно использовать IndexOf, который выполняет линейный поиск:

int k = nums.IndexOf(0);
1 голос
/ 27 января 2020

BinarySearch ожидает сортировки ввода. Из документов :

Если этот метод вызывается с несортированным массивом, возвращаемое значение может быть неправильным, а отрицательное число может быть возвращено, даже если значение присутствует в массиве.

...