python3 二分法查找

'''
二分法查找
有序列表
掐头去尾取中间
查找列表中xx在不在列表中,在,则返回索引值
'''
# lst = [1, 4, 6, 8, 9, 21, 23, 26, 35, 48, 49, 54, 67, 89, 99] #使用in判断,不使用二分法
# n = 49
# for i, v in enumerate(lst):
#     if v == n:
#         print("找到了,索引为%d" % i)
#         break
# else:
#     print("没找到.")

'''二分查找'''
# lst = [1, 4, 6, 8, 9, 21, 23, 26, 35, 48, 49, 54, 67, 89, 99]
# n = 49
# 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("找到了,索引为:%d" % mid)
#         break
# else:
#     print("没找到.")

'''使用递归调用完成二分法查找'''
lst = [1, 4, 6, 8, 9, 21, 23, 26, 35, 48, 49, 54, 67, 89, 99]
n = 49
def binarySearch(lst, n, left, right):
    if left <= right:
        mid = (left + right)//2
        if n < lst[mid]:
            right = mid - 1
        elif n > lst[mid]:
            left = mid + 1
        else:
            return "找到了,索引为:%d" % mid
        return binarySearch(lst, n, left, right)
    else:
        print("没找到.")
        return -1

ret = binarySearch(lst, n, 0, len(lst)-1)
print(ret)

 

 

 

posted on 2019-04-28 11:24  lilyxiaoyy  阅读(847)  评论(0编辑  收藏  举报

返回
顶部