演算法之二分法

2021-10-04 11:07:26 字數 1515 閱讀 8004

演算法:是是一種高效解決問題的辦法

需求:有乙個按照從小到大順序排列的數字列表

需要從該數字列表中找到我們想要的那個乙個數字

如何做更高效???

nums=[-

3,4,

7,10,

13,21,

43,77,

89]find_num=

10nums=[-

3,4,

13,10,

-2,7

,89]nums.sort(

)#首先進行排序

print

(nums)

方案一:整體遍歷效率太低

for num in nums:

if num == find_num:

print

('find it'

)break

方案二:二分法

二分法是通過中間取值,然後比較中間值與目標值的大小,如果中間值大那

麼保留列表左側,繼續取中間值進行比較,以此類推直到找到該值

defbinary_search

(find_num,列表)

: mid_val=找列表中間的值

if find_num > mid_val:

# 接下來的查詢應該是在列表的右半部分

列表=列表切片右半部分

binary_search(find_num,列表)

elif find_num < mid_val:

# 接下來的查詢應該是在列表的左半部分

列表=列表切片左半部分

binary_search(find_num,列表)

else

:print

('find it'

)nums=[-

3,4,

7,10,

13,21,

43,77,

89]find_num=

8def

binary_search

(find_num,l)

:print

(l)if

len(l)==0

:print

('找的值不存在'

)return

mid_index=

len(l)//2

if find_num > l[mid_index]

:# 接下來的查詢應該是在列表的右半部分

l=l[mid_index+1:

] binary_search(find_num,l)

elif find_num < l[mid_index]

:# 接下來的查詢應該是在列表的左半部分

l=l[

:mid_index]

binary_search(find_num,l)

else

:print

('find it'

)binary_search(find_num,nums)

搜尋演算法之二分法

二分法是搜尋演算法中的最簡單演算法,其另一種稱呼為折半查詢法,實際上核心思想就是對乙個有序陣列,進行從中間分隔,然後去中間值來進行查詢,如果對應所要找的數值比中間的值大,則說明搜尋的數值在陣列的右側,如果小則說明在左側,二分查詢最重要的前提是所要搜尋的陣列資料一定要是有序的,如果是無序的話,則這個方...

排序演算法之 二分法排序

之所以單獨來二分法排序,是因為近些天一直在做二分法查詢的問題,延伸只二分法排序,做此記錄,以便於以後記憶。首先了解下二分法的思想 對於區間 a,b 上連續不斷且f a f b 0的函式y f x 通過不斷地把函式f x 的零點所在的區間一分為二,使區間的兩個端點逐步逼近零點,進而得到零點近似值的方法...

Python的演算法之二分法

一 演算法 什麼是演算法?演算法是高效解決問題的辦法。演算法之二分法針對遞迴的例項需求 有乙個按照從小到大順序排列的數字列表,查詢某乙個數字 定義乙個無序的列表 nums 3,4,5,67,8,9,124,1541,56,23637,7,37,321,21,61,515,1 nums.sort 給列...