二分探索を実装してみます。
概要
ソート済みのリストや配列に入ったデータ(同一の値はないものとする)に対する検索を行うにあたって、 中央の値を見て、検索したい値との大小関係を用いて、検索したい値が中央の値の右にあるか、左にあるかを判断して、片側には存在しないことを確かめながら検索していく。
二分探索 – Wikipedia
サンプルコード
import random
def binary_search(data, value):
left = 0
right = len(data) - 1
while left <= right:
middle = (left + right) // 2
if data[middle] == value:
return middle
elif data[middle] < value:
left = middle + 1
else:
right = middle - 1
return -1
data = sorted(random.sample(range(1, 42), 10))
i = data[random.randint(1, 9)]
print("data : ", data)
print("target : ", i)
print("result : ", binary_search(data, i))
実行結果(例)
data : [3, 4, 6, 8, 9, 11, 14, 21, 26, 38]
target : 11
result : 5