二进制搜索卡在无限循环中

时间:2017-03-31 14:15:22

标签: ruby

我正在尝试测试二进制搜索算法。然而,逻辑似乎是正确的,我遇到了一些问题。

有两种不同的方法caseif。如果一种方法失败,另一种方法是正确的。

1

arr = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

def search(arr, value)
  if arr.nil?
    return "value not in array"
  end
  l = 0
  u = (arr.length - 1)
  t = value
  if l > u
    puts "array is wrong!"
    return
  end

  while l < u
    m = (l + u) / 2
    case m
    when m < t
      l = (m + 1)
    when m == t
      puts "hello world"
    when m > t
      u = (m - 1)
    end
  end
end


search(arr, 5)

2

def search(arr, value)
  if arr.nil?
    return "value not in array"
  end
  l = 0
  u = (arr.length - 1)
  t = value
  if l > u
    puts "array is wrong!"
    return
  end

  while l < u
    m = (l + u) / 2
    if m < t
      l = (m + 1)
    elsif m == t
      puts "hello world"
      break
    elsif m > t
      u = (m - 1)
    end
  end
end

我认为我的代码可以正常工作,但是某些东西导致我的while循环继续无限。我在做什么导致无限循环?

0 个答案:

没有答案