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
古に作った物の備忘録です。
アルゴリズム確認用としてどうぞどうぞ。