演算法:是是一種高效解決問題的辦法
需求:有乙個按照從小到大順序排列的數字列表
需要從該數字列表中找到我們想要的那個乙個數字
如何做更高效???
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 給列...