資料結構與演算法 二分法查詢

2021-10-03 16:30:23 字數 1520 閱讀 5834

資料結構與演算法 二分法查詢

查詢的陣列必須是有序的

可以和氣泡排序合起來用

使用二分法查詢能提高查詢效率

每次查詢砍掉一半的資料量,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,...