二分查找Python实现
class Solution(object):
def search(self, nums, target):
"""
从有序列表nums中查找target。如果找到则返回下标,找不到则返回-1
"""
# 首先定义最左侧和最右侧的下标
left = 0
right = len(nums) - 1
while left <= right:
# 求出中间的下标
center_index = (left + right) // 2
if nums[center_index] == target:
return center_index
elif nums[center_index] < target:
# 由于是有序数组,所以如果中间的值小于查找的值的话,则结果就存在于右半部分。那么就需要把 左边的下标换成中间下标+1
left = center_index + 1
else:
# 同上,如果中间值大于查找的值,则结果存在于右半部分。则把右边下标换成中间-1
right = center_index - 1
return -1
if __name__ == "__main__":
s = Solution()
nums = [-1, 0, 3, 5, 9, 12]
target = 9
print(s.search(nums, target))