[英]Weird binary search behavior in Ruby
我正在尝试从头开始在 Ruby 中实现递归二进制搜索。
这是我的代码:
class Searcher
def get_limits(array)
[0, array.length - 1]
end
def binary_search_recursive(array, key)
low, high = get_limits(array)
mid = (low + high) / 2
return -1 if low > high
return binary_search_recursive(array[low, mid-1], key) if (array[mid] > key)
return binary_search_recursive(array[mid+1, high], key) if (array[mid] < key)
return mid if (array[mid] == key)
end
end
arr = [1,3,4,12,16,21,34,45,55,76,99,101]
key = 34
s = BinarySearch.new
index = s.binary_search_recursive(arr, key)
puts index
当我将'key'设置为 21 时,它奇怪地给了我正确的预期答案,即索引 5。可以说,当'key' = 3 时,我也得到了正确的答案,但我怀疑这是偶然的。
你看,每当 'key',= 21 或 3 时,我会为数组的每个元素得到 -1、0. 1 或 2? 我到底做错了什么?
我尝试了几种在网上找到的不同递归二进制搜索版本,这只是最近的一个。 我觉得我每次都遇到同样的问题?
这是我编辑我的问题后你所要求的。 代码的问题是您要拆分为新数组,因此 34 是该数组最后的唯一元素,因此索引为 0。
class Searcher
def binary_search(array, val, low=0, high=(length - 1))
return nil if high < low
mid = (low + high) >> 1
case val <=> array[mid]
when -1
binary_search(array, val, low, mid - 1)
when 1
binary_search(array, val, mid + 1, high)
else mid
end
end
end
arr = [1,3,4,12,16,21,34,45,55,76,99,101]
key = 34
s = Searcher.new
index = s.binary_search(arr, key, 0, arr.length)
puts index
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.