二分法查找python

二分法查找也就是通常所说的折半查找,但是有一个要求:数组是必须是有序的。

思路分析:范围每次缩小一半,直到只剩一个元素。
代码思路:不断的除以2,假定我们要查找的元素是 who, 中点 middlePoint

# -*- coding: utf-8 -*-

def binarySearch(arr, who):
    # 记录数组的最高位和最低位
    min = 0
    max = len(arr) - 1

    if who in arr:
        # 建立一个死循环,直到找到who
        while True:
            # 得到中位数
            # 这里一定要加int,防止列表是偶数的时候出现浮点数据
            middlePoint = int((min + max) / 2)
            # who在数组左边
            if arr[middlePoint] > who:
                max = middlePoint - 1
            # who
            elif arr[middlePoint] < who:
                min = middlePoint + 1
            # who在数组中间
            elif arr[middlePoint] == who:
                print(str(who) + "在数组里面的第" + str(middlePoint+1) + "个位置")
                return arr[middlePoint]
    else:
        print("没有找到该数字!")


if __name__ == "__main__":
    arr = [1, 6, 9, 10, 23, 46, 88, 90, 100]
    while True:
        who = input("请输入你要查找的数字:")
        if who == " ":
            print("谢谢光临!")
            break
        else:
            binarySearch(arr, int(who))

打印框:
请输入你要查找的数字:23
23在数组里面的第5个位置
请输入你要查找的数字:88
88在数组里面的第7个位置
请输入你要查找的数字:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值