1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| def binary_search(lis,right, left,item): # lis 有序列表 # left 左指针 0 # right 右指针 len(lis)-1 # item 查找元素 while left <=right : mid = (right + left) //2 # 获取中间位置,数字的索引 if item < lis[mid]: #如果查询的数字比中间值小,就去二分之后的左边找 right = mid -1 # 来到左边之后 右边边界 mid -1
elif item > lis[mid]: #如果查询的数字比中间值大,就去二分之后的右边找 left = mid +1 # 来到右边之后 右边边界 mid +1 else: return mid # 返回中间值的下标 return -1 # 如果 循环结束,左边大于右边 没有找到元素 lis = [11, 32, 51, 21, 42, 9, 5, 6, 7, 8] print(lis) lis.sort() print(lis)
while 1: num = int(input('输入要查找的数:')) res = binary_search(lis, len(lis)-1,0,num) print(res) if res == -1: print('未找到!') else: print('找到!') # 2 ,递归算法 def binary_search(lis, right, left, item): # 结束条件 if left > right: return -1 # 结束递归 mid = (left + right) // 2 if item < lis[mid]: right = mid - 1 elif item > lis[mid]: left = mid + 1
else: return mid return binary_search(lis, right, left, item)
lis = [11, 32, 51, 21, 42, 9, 5, 6, 7, 8] print(lis) lis.sort() print(lis)
while 1: num = int(input('输入要查找的数:')) res = binary_search(lis, len(lis) - 1, 0, num) print(res) if res == -1: print('未找到!') else: print('找到!')
|