查詢演算法 二分查詢python實現

2021-10-07 15:04:37 字數 1444 閱讀 5730

"""

二分查詢

時間複雜度為o(logn),空間複雜度為o(1)

二分查詢也叫做折半查詢,是一種在有序陣列中查詢某一特定元素的查詢演算法。

查詢過程從中間元素開始。如果中間元素正好是要查詢的元素,則查詢過程結束。

"""def

binary_search1

(arr, value)

:"""

binary_search1 尋找與value相等的值返回下標,沒有則返回-1

:param arr:

:param value:

:return:

"""# 初始化左右游標

left, right =0,

len(arr)-1

while right >= left:

mid =

(left + right)//2

if arr[mid]

> value:

right = mid -

1elif arr[mid]

< value:

left = mid +

1else

:return mid

return-1

defbinary_search2

(arr, value)

:"""

對同乙個列表做二分查詢,找出在列表中不大於關鍵字的最大值。

:param arr:

:param value:

:return:

"""left, right =0,

len(arr)-1

# 不使用等於原因是如果 左右指標相等時,代表查詢已經完成了,此時不進行結束的化無法結束迴圈

while right > left:

# 如果不進行加1操作,若left和right相鄰時,mid的平均值則永遠 = left,此時迴圈則永遠無法結束

mid =

(left + right +1)

//2if arr[mid]

<= value:

left = mid

else

: right = mid -

1return arr[mid]

if __name__ ==

'__main__'

: test_list =[2

,5,6

,8,12

,15,17

,23,27

,31,39

,40,45

,56,79

,90] value =

int(

input

("please input your goal_value: "))

print

(binary_search2(test_list, value)

)

Python演算法 二分查詢

二分查詢 binary search 也被稱為折半查詢,是在乙個有序陣列中查詢特定元素位置的查詢演算法。二分查詢要求查詢序列必須採用順序儲存,且表中元素按關鍵字有序排列。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成...

Python 二分查詢演算法

二分前提是有序,否則不可以二分 二分查詢演算法的是時間複雜度o log n 函式可以分2類 bisect系,用於查詢index insort系,用於實際插入 預設重複時從右邊插入import bisect lst 37 88,20 50,30 65,41 50 newlst sorted lst 公...

python二分查詢演算法

楔子 如果有這樣乙個列表,讓你從這個列表中找到66的位置,你要怎麼做?l 2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88 你說,so easy!l.index 66 我們之所以用index方法可以找到,是...