地上の洞窟

どこにも行かず、液晶と「にらめっこ」し続ける人の物語。

【Ruby】二分探索 自作

class Array
  def bsearch(v)
    l = -1
    r = size
    while r - l > 1
      m = (l + r) / 2
      self[m] >= v ? r = m : l = m
    end
    self[r] == v ? self[r] : nil
  end

  def bsearch_index(v)
    l = -1
    r = size
    while r - l > 1
      m = (l + r) / 2
      self[m] < v ? l = m : r = m
    end
    r 
    # self[r] == v ? r : nil
  end

  def bsearch_insert(v)
    l = -1
    r = size
    while r - l > 1
      m = (l + r) / 2
      self[m] >= v ? r = m : l = m
    end
    insert(r, v) if self[r] != v
  end
  
  def bserach_delete(v)
    l = -1
    r = size
    self[m = (l + r) / 2] >= v ? r = m : l = m while r - l > 1
    self[r] == v ? delete_at(r) : nil
  end
end

古に作った物の備忘録です。
アルゴリズム確認用としてどうぞどうぞ。