Позвольте мне объяснить, как работает бинарный поиск.
Скажем у вас есть этот массив:
{1, 3, 5, 7, 10, 15, 20}
И я хочу, чтобы найти индекс 15. Что бинарный поиск будет делать то, что он смотрит на середине массива, 7. 7 больше или меньше чем 15? Если оно меньше 15, повторите то же самое снова во второй половине массива (10, 15, 20). Если оно больше 15, сделайте это в первой половине (1, 3, 5). Если оно равно 15, то это означает, что 15 найдено.
Это означает, что массив должен быть отсортирован для работы бинарного поиска. Это объясняет, почему выполнение двоичного поиска в вашем массиве возвращает отрицательное число. Потому что, очевидно, метод не может найти требуемую строку, используя алгоритм бинарного поиска.
Вы можете получить верный указатель с помощью IndexOf
. Это потому, что IndexOf
использует линейный поиск, чтобы найти элемент. Он смотрит на каждый элемент массива и сравнивается с тем, который вы находите. Поэтому вопрос о том, сортируется ли массив, не имеет значения.
Примечание: Я не читал исходный код IndexOf
. Он может использовать двоичный поиск, если обнаружит, что массив отсортирован. Это только моя догадка.
Обычно binarysearch работает над отсортированным списком/массивом. Но вы также можете изменить, если ваш список соответствует определенному шаблону. Но в случае совершенно случайного порядка.binarySearch не будет работать – sinsuren
Итак, вы внимательно прочитали документацию для обоих методов ... прошу пояснить, что именно там не было ясно. –
, если вы посмотрите на определение бинарного поиска, вы увидите, что бинарный поиск - это алгоритм поиска, который находит позицию целевого значения в отсортированном массиве. поэтому он работает только на отсортированных массивах. для IndexOf, посмотрите здесь https://msdn.microsoft.com/en-us/library/k8b1470s(v=vs.110).aspx –