Я написал код для двоичного поиска массива целых чисел в scala, который показан ниже. Я знаю, что бинарный поиск довольно сложно реализовать. Итак, я хочу знать, будет ли этот код работать правильно. Я пробовал его, тестируя его на тестовом массиве, и он работает. Однако я не уверен, что это будет всегда работать.Будет ли моя реализация бинарного поиска работать правильно?
ПРИМЕЧАНИЕ: Предположим, что размер массива не превышает половины максимального целочисленного значения.
def binarySearch(arr: Array[Int], starti: Int, endi: Int, x: Int) : Int =
{
if (starti > endi)
return -1
val guess = (starti + endi)/2
if (arr(guess) == x)
return guess
if ((guess != 0) && (arr(guess-1) == x))
return guess - 1
if ((guess != endi) && (arr(guess+1) == x))
return guess + 1
if (arr(guess) > x)
return binarySearch(arr, starti, guess-1, x)
else
return binarySearch(arr, guess+1, endi, x)
}
Он содержит классическое переполняющее дополнение для вычисления средней точки, оно может идти отрицательно, деление на 2 оставляет отрицательным (логический сдвиг будет работать правильно), а затем у вас есть отрицательный индекс. – harold
Как можно делить на 2 положительных числа отрицательное число? Предполагая, что размер массива не превышает максимальное целочисленное значение. – pythonic
Отдел на 2 не производит отрицательное число, добавление делает. Разделение просто оставляет его отрицательным, в то время как его можно было бы спасти, обработав результат добавления как без знака. – harold