Reputation: 87
My task is to make a more efficient binary search code using Ruby. I followed the logic from this link: http://www.cprogramming.com/discussionarticles/sorting_and_searching.html
My code is as follows:
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
I double check, but I do not know why I keep experiencing the followin error:
unexpected $end , expecting kEND
Upvotes: 2
Views: 4179
Reputation: 363
You cannot write else if in ruby you should write elsif
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
Upvotes: 1
Reputation: 122383
You lost an end
in one of the if
statement. And instead of else if
, the keyword in Ruby is 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
Upvotes: 7