資料結構與演算法 二分法查詢
查詢的陣列必須是有序的
可以和氣泡排序合起來用
使用二分法查詢能提高查詢效率
每次查詢砍掉一半的資料量,2**n=資料量,n就是二分法查詢的次數
#普通二分法查詢,返回索引
lst=[0
,1,2
,3,4
,5,6
,7,8
,9,10
,11,12
,13,14
,15,16
,17,18
,19]n=
10right=
len(lst)-1
left=
0while right>=left:
mid=
(right+left)//2
if n
: right=mid-
1if n>lst[mid]
: left=mid+
1if n==lst[mid]
:print
(mid)
break
else
:print
('不存在'
)
執行效果:
#遞迴二分法,要注意遞迴時的返回值
lst=[0
,1,2
,3,4
,5,6
,7,8
,9,10
,11,12
,13,14
,15,16
,17,18
,19]n=
10right=
len(lst)-1
left=
0def
find
(n,left,right)
:if right>=left:
mid=
(right+left)//2
if n
: right=mid-
1return find(n,left,right)
#這裡要用return來接受返回值,否則第一層函式接受不到值
if n>lst[mid]
: left=mid+
1return find(n,left,right)
#這裡要用return來接受返回值,否則第一層函式接受不到值
if n==lst[mid]
:return mid#如果找到了返回索引
else
:return-1
#如果找不到就返回-1
print
(find(n,left,right)
)#輸出列印結果
執行效果:
資料結構與演算法 折半查詢演算法(二分法)
如果從檔案中讀取的資料記錄的關鍵字是有序排列的,則可以用一種效率比較高的查詢方法來查詢檔案的記錄,這就是折半查詢法,又稱為二分法搜尋。折半查詢的基本思想是 減小查詢序列的長度,分而治之地進行關鍵字的查詢。假設陣列元素呈公升序排列。將 n 個元素分成個數大致相同的兩半,取 a n 2 與欲查詢的 x ...
資料結構與演算法 搜尋(二分法)
搜尋是在乙個專案集合中找到乙個特定專案的演算法過程。搜尋通常的答案是真的或假的,因為該專案是否存在。搜尋的幾種常見方法 順序查詢 二分法查詢 二叉樹查詢 雜湊查詢 二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經...
資料結構 之二分法查詢
二分法查詢 二分法查詢是有一定條件的 等如下,對於二分法查詢有乙個最重要的條件就是必須是已經排好序的陣列 資料查詢成功返回序列號,否則返回 1 include int diguifa int a,int key,int low,int high int feidigui int a,int key,...