python二分查詢演算法

2021-09-25 08:23:08 字數 1039 閱讀 8572

楔子

如果有這樣乙個列表,讓你從這個列表中找到66的位置,你要怎麼做?

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

你說,so easy!

l.index(66)...

我們之所以用index方法可以找到,是因為python幫我們實現了查詢方法。如果,index方法不給你用了。。。你還能找到這個66麼?

上面這個方法就實現了從乙個列表中找到66所在的位置了。

但我們現在是怎麼找到這個數的呀?是不是迴圈這個列表,乙個乙個的找的呀?假如我們這個列表特別長,裡面好好幾十萬個數,那我們找乙個數如果運氣不好的話是不是要對比十幾萬次?這樣效率太低了,我們得想乙個新辦法。

二分查詢演算法

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

你觀察這個列表,這是不是乙個從小到大排序的有序列表呀?

如果這樣,假如我要找的數比列表中間的數還大,是不是我直接在列表的後半邊找就行了?

這就是二分查詢演算法

那麼落實到**上我們應該怎麼實現呢? 

簡單版二分法

公升級版二分法

Python演算法 二分查詢

二分查詢 binary search 也被稱為折半查詢,是在乙個有序陣列中查詢特定元素位置的查詢演算法。二分查詢要求查詢序列必須採用順序儲存,且表中元素按關鍵字有序排列。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成...

Python 二分查詢演算法

二分前提是有序,否則不可以二分 二分查詢演算法的是時間複雜度o log n 函式可以分2類 bisect系,用於查詢index insort系,用於實際插入 預設重複時從右邊插入import bisect lst 37 88,20 50,30 65,41 50 newlst sorted lst 公...

Python查詢演算法之二分查詢

從有序列表的初始候選區ls 0 n 開始,對待查詢的值與候選區中間的值比較,使得候選區規模減半 o logn 如果列表已經是有序的了,直接上二分 如果列表是亂序的,那麼要考慮查詢次數,如果查詢次數不頻繁,就用線性,因為排序的時間複雜度 o n 如果查詢次數頻率高,可以考慮先排序,再用二分 usr b...