ctci/10. Sorting and searching/binary_search.py

33 lines
980 B
Python

# binary search in sorted array
# recursive
def binary_search_rec(nums, target, pos0, pos1):
if pos0 <= pos1:
midpoint = (pos0+pos1)//2
if target == nums[midpoint]:
return midpoint
elif target > nums[midpoint]:
return binary_search_rec(nums, target, midpoint+1, pos1)
elif target < nums[midpoint]:
return binary_search_rec(nums, target, pos0, midpoint-1)
else:
return -1
# iterative
def binary_search_iter(nums, target, pos0, pos1):
while True:
if pos0 <= pos1:
midpoint = (pos0+pos1)//2
if target == nums[midpoint]:
return midpoint
elif target > nums[midpoint]:
pos0 = midpoint + 1
elif target < nums[midpoint]:
pos1 = midpoint - 1
else:
return -1
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
target = 4
res = binary_search_iter(nums, target, 0, len(nums)-1)
print(res)