LoginSignup
0
2

【Python】バイナリサーチの実装

Posted at

はじめに

与えられた数字のインデックス番号を返すアルゴリズムです(binary_search)。

実装

binary_search.py
from typing import List, NewType

IndexNum = NewType("IndexNum", int)

def linear_search(numbers: List[int], value: int) -> IndexNum:
  for i in range(0, len(numbers)):
    if numbers[i] == value:
      return i
  return -1

# パターン1(該当する数字のインデックス番号を出力)
# def binary_search(numbers: List[int], value: int) -> IndexNum:
#   left, right = 0, len(numbers) - 1
#   while left <= right:
#     mid = (left + right) // 2
#     if numbers[mid] == value:
#       return mid
#     elif numbers[mid] < value:
#       left = mid + 1
#     else:
#       right = mid - 1
#   return -1

# パターン2
def binary_search(numbers: List[int], value: int) -> IndexNum:
  def _binary_search(numbers: List[int], value: int, left: IndexNum, right: IndexNum) -> IndexNum:
    if left > right:
      return -1
    
    mid = (left + right) // 2
    if numbers[mid] == value:
      return mid
    elif numbers[mid] < value:
      return _binary_search(numbers, value, mid + 1, right)
    else:
      return _binary_search(numbers, value, 0, mid - 1) 

  return _binary_search(numbers, value, 0, len(numbers) - 1)

# テスト
if __name__ == "__main__":
  nums = [0,1,5,6,8,10,25] 
  print(binary_search(nums, 6))

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2