二分查找
从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半
二分查找:
在一段数字内,找到中间值,判断要找的值和中间值大小的比较。
如果中间值大一些,则在中间值的左侧区域继续按照上述方式查找。
如果中间值小一些,则在中间值的右侧区域继续按照上述方式查 找。
直到找到我们希望的数字。
l = [1,3,4,5,6,7,44,55,77,88,99]def func(line,num): low=0#获取最小下标 high=len(line)-1#获取最大下标 while low <= high: #只有 最小下标小于最大下标才能证明有数据 mid=(low+high)//2 #获取中间下标,实现二分 if line[mid] == num: #如果这个中间数等于你想查找的值 return mid #返回该下标 elif line[mid] > num:#如果该数值大于你想寻找的值 high=mid-1#将中间下标的左移一位作为最大下标的值,实现搜索范围减半 else: low=mid+1 #同理 最小下标右移 return "error"print(func(l,1))#输出0
递归函数方式
l = [1,3,4,5,6,7,44,55,77,88,99]def find(l,aim,start=0,end=None): end=len(l) if end is None else end mid_index=(end-start)//2 + start if start <= end: if l[mid_index] < aim: return find(l,aim,start=mid_index+1,end=end) elif l[mid_index] > aim: return find(l,aim,start=start,end=mid_index-1) else: return [mid_index] else: return 'error'print(find(l,5))#输出[3]