【从0到1学算法】二分查找法

说到算法,你们应该都会脑袋疼吧。除了应付一下面试,准备过算法,也接触过很多算法,可是面试完了,基本上就忘光了。但不得不说,算法真的很重要,算法是解决问的方法,你可能会说根本用不上,那只是由于你根本没有算法的思惟,又如何说得上使用呢。在这里,我会和你们一块儿重学算法,阅读《图解算法》入门算法经典书籍,而后根据我的知识进行整理与补充而编写的文章。今天讲的二分查找法,若是你对这个算法很熟请忽略或者复习一下也何尝不可。java

二分查找法

先来看看最简单的查找算法,简单查找法,也能够说是美嘉算法(美嘉常常用到的算法)假设我在1~100的数字中查找56使用美嘉算法是这样的python

image

须要通过56次才能获得结果!当咱们使用二分查找法的时候是这样的从中间50开始猜imagemysql

小了,排除了半的数字! 查找范围缩小至51-100,接下来猜75image面试

大了,又排除了一半数字!查找范围缩小到51-74,接下来猜62。又大了,再猜56image 只猜了4次便找到了正确答案,这就是算法的力量啊! 100个元素里,最多只须要7次便能找到答案image 这就是二分查找法,每次从中间开始猜,每次可排除一半的数量再举个例子,假设要在包含240000个单词的字典中查找一个单词,最多须要找到少步?使用二分查找法是这样的,最多17步image 简单查找法呢,最多240000步通常而言,对于包含n个元素的列表中,用二分查找法最多须要log2n步,而简单查找最多须要n步即二分查找法的时间复杂度为O(logn),简单查找的时间复杂度为O(n),这里的log指的是log2,大O表示法用来表示算法快慢(下集提早预告)算法

二分查找算法python代码sql

def binary_search(list, item):
   low = 0
   high = len(list) - 1
   while low <= high:
       # //表示整除
       mid = (low + high) // 2
       guess = list[mid]
       if guess == item:
           return mid
       elif guess > item:
           high = mid - 1
       else:
           low = mid + 1
   return None

ps:二分查找法只能用于有序列表学习

学会了没?学会能够本身动手,码一码,用什么都语言无所谓。参考:《算法图解》3d


文章首发于公众号【KEN DO EVERTHING】 本公众号专一于java相关技术,但不限于java、mysql、python、面试技巧、生活感悟等。分享优质博文,技术干货,学习资源等优质内容。 欢迎关注,一块儿学习,共成长!code

相关文章
相关标签/搜索