二进制搜索Ruby



我想写一个简单的代码来模拟二进制搜索,让我们假设数组已经排序了。x是数组,y是我要找的数。我想知道需要多少步才能找到y(计数器是我想要的结果)。我的代码有什么问题?

非常感谢!

x = ["2,", "5", "7", "10", "20", "30", "50", "90", "101", "120"]
y = 101
mid = (x.count.to_f/2).ceil
z = x[mid].to_i
counter = 0
while y != z
  counter += 1
  if y < z
    mid = (mid/2).ceil
  else
    mid = mid + (mid/2).ceil
  end
end
print(counter)

这不起作用,因为您的数组包含string。字符串按字母顺序比较。

"5" > "10"
=> true

因此,您的数组没有排序。但是,您可以添加前导零,以便字符串比较像您期望的那样工作:

a.map{|e| e.rjust(4, "0") }
"0005" < "0010"
=>true

感谢大家的投入,我使它工作:

x = [2, 5, 7, 10, 20, 30, 50, 90, 101, 120]
puts "Which character you want to find?"
y = gets.chomp.to_i
first = 0
last = x.count - 1
mid = (x[first..last].count.to_f/2).ceil
z = x[mid-1].to_i
counter = 1
while y != z
  counter += 1
  if y < z
    last = mid
    mid = mid - (x[first..last].count/2).ceil
    z = x[mid]
  else
    first = mid
    mid = mid + (x[first..last].count.to_f/2).ceil
    z = x[mid-1]
  end
end
puts "the answer is #{counter}."

最新更新