將資料分成兩部分,並比較中間值與待查詢資料大小,如果小於則在前半段查詢,如果大於則在後半段查詢。經過數次分割直到中間值等於待查資料或找不到待查資料為止。
時間複雜度:o(logn)。
資料必須是有序的,並且所有資料必須載入到記憶體中。
適用於不需增刪的靜態資料。
注:**於吳燦銘《**資料結構-使用python》
import random
class
search
(object):
defbinary_search
(self, data, value)
:"""
二分查詢迭代法實現
:param data: list 待查詢序列
:param value: int 待查資料
:return: int 索引(查詢不到返回-1)
"""low =
0 high =
len(data)-1
while low <= high:
mid =
int(
(low + high)/2
)if value < data[mid]
: high = mid -
1elif value > data[mid]
: low = mid +
1else
:return mid +
1return-1
defbinary_search_recursion
(self, data, low, high, value)
:"""
二分查詢遞迴法實現
:param data: list 待查詢序列
:param low: int low指標
:param high: int high指標
:param value: int 待查資料
:return: int 索引(查詢不到返回-1)
"""if low <= high:
mid =
int(
(low + high)/2
)if value < data[mid]
:return self.binary_search_recursion(data, low, mid -
1, value)
elif value > data[mid]
:return self.binary_search_recursion(data, mid +
1, high, value)
else
:return mid +
1return-1
defmain()
: search = search(
) data =[0
]*10for index in
range
(len
(data)):
data[index]
= random.randint(1,
10)data =
sorted
(data)
print
("待查詢序列:"
, data)
res_index = search.binary_search_recursion(data,0,
len(data)-1
,5)print
("結果索引為:"
, res_index)
res_index = search.binary_search(data,5)
print
("結果索引為:"
, res_index)
if __name__ ==
'__main__'
: main(
)
Python遞迴實現二分 查詢
週末休息,習慣性的寫點短 data 1,3,5,6,7,9 min 陣列的最小索引 max 陣列的最大索引 data 原陣列 key 需要查詢的數 函式返回值是所在值在陣列中的位置 def search min,max,data,key mid min max 2 if mid 0 return m...
二分查詢(遞迴實現)
include include intk int binarysearch int a,int x,int low,int high a表示需要二分的有序陣列 公升序 x表示需要查詢的數字,low,high表示高低位 int mid low high 2 if x a mid 找到x else if...
遞迴實現二分查詢
回文是一種字串,它正著讀和反著讀都是一樣的。比如level,eye都是回文。用迭代的方法可以很快地判斷乙個字串是否為回文。用遞迴的方法如何來實現呢?首先我們要考慮使用遞迴的兩個條件 include iostream include include string define max 100 usin...