二分法

需求:有一个按照从小到大顺序排列的数字列表 需要从该数字列表中找到我们想要的那个一个数字 如何做更高效???

nums=[-3,4,7,10,13,21,43,77,89]
find_num=10

# 若列表无序可使用sort方法
nums=[-3,4,13,10,-2,7,89]
nums.sort()
print(nums)

方案一:整体遍历效率太低

for num in nums:
    if num == find_num:
        print('find it')
        break
# 若列表中存在元素过多该方法效率极低

方案二:二分法

def num_seach(find_num, l):
    if len(l) == 0:
        print('这个数不存在!')
        return
    mid_index = len(l) // 2
    if find_num < l[mid_index]:
        l = l[:mid_index]
        num_seach(find_num, l)
    elif find_num > l[mid_index]:
        l = l[mid_index + 1:]
        num_seach(find_num, l)
    else:
        print('找到这个数了!')


num_seach(34, l1)

原文地址:https://www.cnblogs.com/bailongcaptain/p/12577107.html