ソート済みの配列から要素を探す
特徴
動作 1. 配列の真ん中の要素を取得する 2. 検索対象の要素と比較して、小さいなら右半分を探索 3. 検索対象の要素と比較して、大きいなら左半分を探索 4. 見つかるまで繰り返す
実装
再帰なし
def binary_searh(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = left + (right - left) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
arr = [1,3,5,7,9,11,13,15,17,19,21]
print(arr)
print(binary_searh(arr, 11))
print(binary_searh(arr, 10))
再帰あり
def binary_search(arr, target, left, right):
if left > right:
return -1
mid = left + (right - left) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
return binary_search(arr, target, mid + 1, right)
else:
return binary_search(arr, target, left, mid - 1)
arr = [1,3,5,7,9,11,13,15,17,19,21]
print(arr)
print(binary_search(arr, 11, 0, len(arr) - 1))
print(binary_search(arr, 10, 0, len(arr) - 1))