Python 二分查詢

2021-10-24 16:13:36 字數 1085 閱讀 9789

前提條件

儲存資料的列表或元組中的資料是排好序了的。

設定兩個變數,start和end表示開始座標和末尾座標,用來計算陣列的中間座標的值;

當中間值和需要查詢的值相等的時候,即查詢完成;

當需要查詢的值大於中間值的時候,就將start賦值為中間座標值,然後再次計算中間座標值,進行比較,這樣就實現了「二分」和「查詢」;

當需要查詢的值小於中間值的時候,就將end賦值為中間座標值,然後再次計算中間座標值,進行比較,這樣就實現了「二分」和「查詢」。

計算中間值時一般是:(start+end)//2,但是這樣處理的時候需要注意乙個容易忽略的點:

python中整除運算是向下圓整的

所以當我們的start=0 和 end=(列表長度-1) 時,我們列表中的最後乙個元素無論怎樣都是不會被遍歷到的(好好想一下中值的運算和整除向下圓整的規則)。

解決方法:

將end設定為列表的長度。即人為多設乙個位置給列表的最後乙個元素去當「替死鬼」。

x =[1

,2,4

,5,6

,7,8

,9,11

,12,13

,15,16

]length =

len(x)

num =

int(

input

('請輸要查詢的數:'))

deferfeng

(number, start, end)

: middle =

(start + end)//2

if x[middle]

== number:

print

(middle)

else

:if x[middle]

> number:

erfeng(number, start, middle)

elif x[middle]

< number:

erfeng(number, middle, end)

erfeng(num,

0, length)

這裡只體現出了問題,更多細節請自己完善。

Python二分查詢

二分查詢又稱折半查詢,首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成...

python 二分查詢

搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半 param array ...

二分查詢(Python)

演算法介紹 二分查詢要求陣列為有序排列,每次取中間的數與target進行比較,若相等,則查詢成功 若中間數較大,則在前一部分查詢,反之,在後一部分查詢。其時間複雜度為o logn 演算法實現def binarysearch nums,target if not nums return false s...