二分查找法
#查找一个输入的数字是否在列表里
lst = [1,8,16,32,55,78,89,1,5,4,7,5,9,6,8,5,4,5,44,5,2,1,4,5,1]
#普通方法
lst=sorted(lst) n=int(input("输入一个数:")) left=0 right=len(lst)-1 while left <=right : mid=(left+right)//2 if n>lst[mid]: left =mid+1 elif n<lst[mid]: right=mid-1 else: print("你要找的数在这") break else: print("你要找的数不在这里")
#递归方法一
lst=sorted(lst) n=int(input("输入一个数:")) def func(n,lst,left,right): if left <=right: mid=(left+right)//2 if n>lst [mid]: left =mid+1 elif n<lst [mid]: right=mid-1 else: print("你要找的数在这" ) return True return func(n,lst,left,right) else: print("你要找的数不在这里") return False ret=func(n,lst,0,len(lst)-1)
#递归方法二
lst=sorted(lst) aim=int(input("请输入一个数:")) def search(lst,aim,start=0,end=None): ''' 功能:二分法查找 :param lst: 被查找的列表 :param aim:被查找的数字 :param start:开始查找的位置 :param end:结束查找的位置 :return:如果被查找到,返回查找的位置,否则返回False ''' if not end:end=len(lst)-1 if start <= end: mid=start+(end-start)//2 mid_value=lst[mid] if aim>mid_value: start=mid+1 elif aim<mid_value: end=mid-1 elif aim==mid_value: return mid ret = search(lst, aim, start, end) return ret else: return False ret=search(lst,aim) print(ret)