【從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

相關文章
相關標籤/搜索