二分查找法

#查找一个输入的数字是否在列表里
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)

 

posted @ 2018-09-20 17:46  阿飞3678  阅读(142)  评论(0编辑  收藏  举报