二分法查找是一种快速查找方法,时间复杂度低,逻辑简单易懂,总的来说就是不断除以2......
例如:需要查找有序数组nums里面某个关键字key的位置,那么首先确认下nums的中位数mid,分为3种情况:
1)nums[mid] > key,说明key在nums中心的左边范围;
2)nums[mid] < key,说明key在nums中心的右边范围;
3)nums[mid] == key,说明key在nums的中心位置;
范围每次缩小一半,需要写个死循环,直到找到位置;
二分法唯一要求数组是有序的
def BinarySearch(nums,key): min = 0 #记录数组的最小位置 max = len(nums) - 1 #记录数组的最大位置 if key in nums: #建立一个死循环,直到找到位置 while True: #计算的到中位数,注意一定要加int(),防止是偶数时,出现小数情况 mid = int((min+max)/2) #key 在nums的左边 if nums[mid] > key: max = mid - 1 #key在nums的右边 elif nums[mid] < key: min = mid + 1 #key在nums的中心位置 elif nums[mid] == key: return mid else: return "%s不在%s里面"%(key,nums) if __name__ == '__main__': nums = [1,2,5,7,9,12,15,18] n1 = 15 n2 = 20 print(BinarySearch(nums,n1)) print(BinarySearch(nums,n2))