Python实现二分查找

二分查找又叫作折半查找,意思为每次查找后,查找的范围都折半。这样查找到最后,查找范围内只剩一个数时,判断它是否为要查找的数。如果是,就记录它的位置;如果不是,则要查找的数不在这个数组中。

用程序实现一个有 15 个元素的数组 [1,3,5,6,7,8,13,14,15,17,18,24,30,43,56] 的二分查找。

分析:二分查找需要两个指针,一个指向数组的第一个元素,叫做头指针;另一个指向数组最后一个元素的后方,叫作尾指针。

在程序验证过程中,发现可以直接把头指针置为 -1,循环条件为 (tail-head)>1,不成立时可以分三种情况:

  • 开头处——tail-(-1) = 1,tail为0,表示下标0处已经判断过
  • 结尾处——len(numbers)-head = 1,head=len(numbers)-1,表示最后一个元素被判断过
  • 中间——tail-head = 1,tail和head表示的下标被判断过

完整程序如下

numbers = [1, 3, 5, 6, 7, 8, 13, 14, 15, 17, 18, 24, 30, 43, 56]

head = -1
tail = len(numbers)
number = int(input('请输入要查找的数字:'))

while (tail-head) > 1:
    mid = (tail+head) // 2
    if numbers[mid] == number:
        print(f'下标是{mid}')
        break
    elif numbers[mid] > number:
        tail = mid
    else:
        head = mid
else:
    print(f'{number}不在列表中')
原文地址:https://www.cnblogs.com/augustine0654/p/14815280.html