我的任务是使用Ruby制作更高效的二进制搜索代码。我按照这个链接的逻辑: http://www.cprogramming.com/discussionarticles/sorting_and_searching.html
我的代码如下:
def bsearch(a, k)
lower = 0
upper = a.length-1
while a[upper].to_f> k.to_f and a[lower].to_f< k.to_f
low_diff = k.to_f -a[lower].to_f
range_diff = a[upper].to_f-a[lower].to_f
count_diff = upper-lower
range = low_diff/range_diff * count_diff + lower
if k==a[lower]
return lower
if k.to_f > a[range].to_f
lower = range+1
else if k.to_f < a[range].to_f
upper =range
else
lower = range
end
end
end
我仔细检查,但我不知道为什么我一直遇到以下错误:
unexpected $end , expecting kEND
答案 0 :(得分:7)
您在其中一个end
声明中丢失了if
。而不是else if
,Ruby中的关键字是elsif
if k==a[lower]
return lower
end #lost this end
if k.to_f > a[range].to_f
lower = range+1
elsif k.to_f < a[range].to_f #use elsif
upper =range
else
lower = range
end
答案 1 :(得分:1)
你不能在ruby中写 else if else
def bsearch(a, k)
lower = 0
upper = a.length-1
while a[upper].to_f> k.to_f && a[lower].to_f< k.to_f
low_diff = k.to_f -a[lower].to_f
range_diff = a[upper].to_f-a[lower].to_f
count_diff = upper-lower
range = low_diff/range_diff * count_diff + lower
if k==a[lower]
return lower
end
if k.to_f > a[range].to_f
lower = range+1
elsif k.to_f < a[range].to_f
upper =range
else
lower = range
end
end
end