【发布时间】:2016-06-04 23:13:50
【问题描述】:
如果我要查找的值可能不在数组中,我将如何编写二进制搜索方法?
二分搜索:
def binary_search(array, value, from=0, to=nil)
to = array.count - 1 unless to
mid = (from + to) / 2
if value < array[mid]
return binary_search(array, value, from, mid - 1)
elsif value > array[mid]
return binary_search(array, value, mid + 1, to)
else
return mid
end
end
如果值在数组中,效果很好。
binary_search([1,2,3,5], 5)
但如果不是,则有错误。
binary_search([1,2,3,5], 4)
堆栈级别太深(SystemStackError
我有两个大的字符串数组(每个字符串在其自己的数组中都是唯一的),但数组之间存在重叠,这是我想要找到的。我需要修改方法,这样它就不会在找不到特定字符串时使脚本崩溃,然后继续迭代。
您可以想象每个字符串看起来都类似于akbvuxef。虽然这不重要。
【问题讨论】:
-
如果
from >= to则停止递归。
标签: ruby binary-search