mysql二分法查找亿行_二分法查找

如果让你在一堆数中,查看某个数是否存在?你会怎么找?

按常识是不是一个一个看过去?这个我们就叫顺序查找

最好的情况就是看到第一个就是你要的,就不会往下看了,但是如果是最后一个数是你想要的,这种情况下,查看次数就变成了数字的个数

如果数很多时,比如亿计,会不会觉得效率很低

def linear_search(li, val):

for ind, v in enumerate(li):

if v == val:

return ind

else:

return None

下面我们介绍的二分法查找,要比顺序查找有效的多,但是前提示是这堆数字要有序

实现思路大体如下:

取最中间数,拿它和查找值比较

如果中间数大(假设数是从小到大排),那说要找的数在左边,排除右边

取左边一半里的中间数,和查找值比较,这样又可以排除一半,这循环下去,直到找到或得到没有这个数

编写二分法查找的代码时,注意左右边界的变化,以及取中间值比较,一直循环的条件就是左右边界不碰头left<=right

def binary_search(li, val):

left = 0

right = len(li) - 1

while left <= right: # 候选区有值

mid = (left + right) // 2

if li[mid] == val:

return mid

elif li[mid] > val: # 带查找的值在mid左侧

right = mid - 1

else: # li[mid] < val 带查找的值在mid右侧

left = mid + 1

else:

return None

总结:二分法查找前提是有序的,当然排序也又是要多花时间的,用不用二分法查找看场景,如果你只是查一次,那二分法查找,反而更慢,因为排序,如果你查好多次,那就可以排好一次好,复用二分法查找

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值