"""
二分查詢
時間複雜度為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方法可以找到,是...