python實現二分查詢(遞迴 迭代)

2021-10-06 20:26:46 字數 1943 閱讀 4182

將資料分成兩部分,並比較中間值與待查詢資料大小,如果小於則在前半段查詢,如果大於則在後半段查詢。經過數次分割直到中間值等於待查資料或找不到待查資料為止。

時間複雜度: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...