对分查找(二分查找) python版

"""
二分查找
1、被查找的序列是有序的。
2、要查找的数据与序列的中间数比较,
    如果相等,不用继续找了,
   否则要么在中间数的左边序列找,要么在右边序列找,
   在子序列继续上述方法。
3、时间复杂度分析
    查找规模为n,第一次查找后的规模为(n-1)/2,取最长子序列,
    假如n是奇数,规模为(n-1)/2,假如n是偶数,规模为n/2(取最长子序列),
    我们取规模的大值,即n/2,所以k次查找后的规模为n/2的k次方。
    最坏情况下,经过k次查找后,规模为一个数待比较,即n/2的k次方=1,
    k=log2的n,假如k有小数,因为规模是放大的,所以去掉小数,最终比较次数还要加1.
    所以时间复杂度为log2的n取整后加1,当n趋于无限大时,可以忽略常数项,
    所以最终为log2的n取整.
"""
key = int(input("请输入待找的整数:"))
d = [6,12,15,18,22,25,28,35,46,58,60]
f = False
i=0
j=len(d)-1
m = -1
while i<=j:
    m = (i+j) // 2
    if d[m] == key:
        f = True
        break
    elif d[m] > key:
        j = m-1
    else:
        i= m+1
if f:
    print("查找成功!第%d个" %(m+1))
else:
    print("没有找到")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值