二分查找算法

  1. 将数据排序然后分割成两份,将要查找的数据与中间值比较,小于中间值在前半段,大于中间值在后半段。然后在根据判断的位置,继续分割查找
  2. '''
    折半查找法
    
    '''
    
    def search(data, num):
        low = 0
        high = len(data) - 1
        while low <= high and num != -1:
            mid = int((low + high) / 2)
            if num < data[mid]:
                print("%d 介于 %d[%d] 和 %d[%d] 之间, 查找左半边" % (num, low + 1, data[low], mid +1 , data[mid]))
                high = mid - 1
            elif num > data[mid]:
                print("%d 介于 %d[%d] 和 %d[%d] 之间, 查找右半边" % (num, mid + 1, data[mid], high + 1, data[high]))
                low = mid+1
            else:
                return mid
        return -1
    
    num = 0
    data = [12, 45, 56, 66, 77, 80, 97, 101, 120]
    for i in range(1):
        for j in range(len(data)):
            print("%d[%d]" % (i * 9 + j + 1, data[i * 9 + j]), end=' ')
        print('')
    
    while True:
        number = 0
        num = int(input("Enter"))
        if num == -1:
            break
        number = search(data, num)
        if number == -1:
            print("Not found")
        else:
            print(f"Found number {number + 1}, {data[number]}")
    
    """
    程序运行逻辑:
        low 和 high 分别对应0, 和列表的最大索引值
        low <= high: low 和 high 会移动,此处进行判断
        mid = int((low + high) / 2): 用于查找已经排序好的列表中位的索引
        data[num] 取列表中位的值与查找的值进行比较
        如果num 小于 data[num], 就意味着查找的值在列表的左半边
        所以 最高位 high 就等于 mid - 1, 在此例子中,high就成了3
        所以新的取值区间就变成了0-3
    
    
    
    
    """

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值