2013-04-10 12:38:42 -07:00
|
|
|
class Array
|
|
|
|
|
def binary_search(val, low=0, high=(length - 1))
|
|
|
|
|
return nil if high < low
|
2015-11-18 06:14:39 +00:00
|
|
|
mid = (low + high) >> 1
|
2016-12-05 22:15:40 +01:00
|
|
|
case val <=> self[mid]
|
2015-11-18 06:14:39 +00:00
|
|
|
when -1
|
|
|
|
|
binary_search(val, low, mid - 1)
|
|
|
|
|
when 1
|
|
|
|
|
binary_search(val, mid + 1, high)
|
2013-04-10 12:38:42 -07:00
|
|
|
else mid
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2013-10-27 22:24:23 +00:00
|
|
|
ary = [0,1,4,5,6,7,8,9,12,26,45,67,78,90,98,123,211,234,456,769,865,2345,3215,14345,24324]
|
|
|
|
|
|
|
|
|
|
[0,42,45,24324,99999].each do |val|
|
|
|
|
|
i = ary.binary_search(val)
|
2013-04-10 12:38:42 -07:00
|
|
|
if i
|
|
|
|
|
puts "found #{val} at index #{i}: #{ary[i]}"
|
|
|
|
|
else
|
|
|
|
|
puts "#{val} not found in array"
|
|
|
|
|
end
|
|
|
|
|
end
|