折半查找

折半查找

例:有10个鸡蛋,有一个坏的(重一些),给你天平。称几次

5   5

2   2

1   1

 

#折半查找

"""
         0  1  2   3   4  5   6   7  8   9
List = [11,22,33, 44, 55,66, 77, 88, 99,111]
假设需要: 66
第一次:(0+ 9)//2 = 4 ;55和 66比较,
    接下在 55的右边找: 66, 77, 88, 99,111
第二次: (5+9)//2=7 88和 66比较
    接下来在 88的左边找: 66, 77,
第三次:(5+6)//2=566==66,对应下标 5

开始下标: 0开始,慢慢变大 5 6
结尾下标: (个数-1) 慢慢减小 6 5
"""
list = [11,22,33,44,55,66,77,88,99,111]
n=int(input('请输入需要的数'))
start  = 0  #最左边开始的下标
end = len(list)-1   #最右边开始的下标
index = -1  #对应的的下标,-1没有
# 找到
while start <= end:
    #中间值 与 n进行比较
    mid = (start + end)//2
    if list[mid]==n :   #找到
        index=mid
        break
    elif list[mid]<n:   #继续 在中间值的右边找
        start = mid + 1
    else:
        end = mid - 1
print('%d 对应的下标:%d'%(n,index))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值