AOJの問題を解く途中で作ったのでメモしておく。結局使わなくなったけど。
あらかじめソートされているのが前提。見つからないときは None を返す。
def binary_search(lis, x): if len(lis) == 0: return None else: i = len(lis) / 2 if lis[i] == x: return x elif x < lis[i]: return binary_search(lis[:i], x) else: return binary_search(lis[i+1:], x) a = range(100000) print binary_search(a, 3359) print binary_search(a, 100001) print binary_search(a, 0) print binary_search(a, -1)
実行結果:
^o^ > python binary_search.py 3359 None 0 None