二分查找,每次查找后,查找的范围都折半。这样查找到最后,查找范围内只剩一个数时,判断是否为要找的数。如果是,就记录它的位置;如果不是,则要查找的数不在这个数组中。
针对有序数组
双指针:
头指针,第一个数
尾指针,最后一个数+1
numbers = [1,3,5,6,7,8,13,14,15,17,18,24,30,43,56]
head, tail =0, len(numbers)
search = int(5)
while tail - head > 1:
mid = (head + tail)//2
if search < numbers[mid]:
tail = mid
if search > numbers[mid]:
head = mid+ 1
if search == numbers[mid]:
ans = mid
break
else:
if search == numbers[head]:
ans = head
else:
ans = -1
print(ans)