python二分法代码_Python实现二分法

Python实现二分查找

为什么需要二分查找如果查找1-100内任意一个数字?顺序查找(简单查找)从1开始或者100倒着来进行查找

最快只需要一次,但是最慢则需要一百次,差距相当大

大O表示法为 O(n)

二分查找每次从中间进行查找,先从50,再判断大还是小,再从75或者25进行查找,依次类推

由于每次都会排除一般的数字,所以最慢也只需要7次,log2 n次

大O表示法为O(log n)

要求:必须是有序的情况

从上面的例子可以看出来,在有序的情况下,二分查找的效率是很高的

大O表示法

大O表示法是一种比较特殊的表示法,指出了算法的消耗时间速度,主要可以表示两种算法之间时间消耗的不同增速小明要准备去北京玩,为了更好的准备,小明提前准备了100套线路方案,然后准备用程序验证那种方案更加方便省时间,如果使用简单查找的话进行验证,假设一套方案需要一秒钟,那么100套就需要100毫秒(O(n),而使用二分查找的话只需要7毫秒(O(log n),这就整整差了十多倍的时间,这仅仅只是100套,如果是一亿套方案呢,简单查找时间就会更久, 由此我们可以根据大O表示法比较两个算法直接的时间增量速度以此判断哪个算法更加便捷

python代码实现二分查找def BinarySearch(list1, num):

min = 0               # 最小的下标

max = len(list1) - 1  # 最大的下标

i = 0

while True:

i += 1

mid = (max + min) // 2 # 中间的下标每次向下取整

if num > list1[mid] :

min = mid + 1  # 小于需要的猜的数,则将最小下标变为中间的,又因为中间的已经猜过,所以要加1

elif num == list1[mid] :

print("找到数据")

print("一共查找%d次"%i)            break

else :

max = mid - 1  # 大于需要的猜的数,则将最大下标变为中间的,又因为中间的已经猜过,所以要减1

if __name__ == "__main__":

list1 = [i for i in range(0,100)]

num = 5

BinarySearch(list1, num)

作者:python_LiuYi

链接:https://www.jianshu.com/p/af69c01375ce

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值