二分查找
时间复杂度:O(logn)
二分查找只能查找已经排好序的数据,通过比较数组中间的数据与目标数据的大小,可以得知目标数据
是在数组的左边还是右边。因此,比较一次就可以把查找范围缩小一半。重复执行该操作就可以找到目标数据,或得出目标数据不存在的结论。
# -*- coding = utf-8 -*-
def binary_search(arr,l,r,x):
m = int((l+r)/2)
if x == arr[m]:
return m
elif x < arr[m]:
return binary_search(arr,l,m-1,x)
else:
return binary_search(arr,m+1,r,x)
if __name__ == "__main__":
arr = [8,10,16,20,31,84,99,152]
index = binary_search(arr,0,len(arr)-1,31)
print(f"搜索的数字{arr[index]}的下标是{index}")