33 lines
980 B
Python
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) |