必須是乙個已經排好序的陣列
從有序列表的候選區data[0:n]開始,通過對待查詢的值與候選區中間值的比較,可以使候選區減少一半。
示例圖
defbin_serach(data_set, val):
"""二分查詢法
:param data_set:傳入乙個已經拍好序的陣列
:param val: 目標值
:return: 陣列中目標值的下標
"""low =0
high = len(data_set) - 1
while low <=high:
mid = (low + high) // 2
if data_set[mid] ==val:
return
mid
elif data_set[mid]
low = mid + 1
else
: high = mid - 1
return
'無此值
'ret = bin_serach([1, 2, 3, 4, 5, 6, 7], 11)
print(ret)
defbin_serach(data_set, val, low, high):
"""二分查詢法
:param data_set: 傳入乙個已經拍好序的陣列
:param val: 目標值
:param low: 列表最小下標
:param high: 列表最大下標
:return: 陣列中目標值的下標
"""while low <=high:
mid = (low + high) // 2
if data_set[mid] ==val:
return
mid
elif data_set[mid]
return bin_serach(data_set, val, mid + 1, high)
else
:
return bin_serach(data_set, val, low, mid - 1)
return
'無此值
'data_set = [1, 2, 3, 4, 5, 6, 7]
ret = bin_serach(data_set, 1, 0, len(data_set)-1)
print(ret)
演算法2 二分查詢法
二分法 關鍵 根據比較結果決定新的左 右邊界 時間複雜度 o logn 重要特點 一定要有序 模板lc704 查詢陣列中是否存在目標值 首先檢查是否空陣列 進入迴圈 小技巧 mid l r l 2 防止 l r 2超出int型別的範圍 迴圈條件 l r。class solution int l 0,...
演算法 二分查詢法
例題 設計乙個函式,接收乙個有序陣列和乙個元素,如果指定的元素包含在陣列中,則返回其位置。看見這道題,我們正常的想法為遍歷陣列的所有元素然後乙個乙個的與數值相比較,如果相等,返回索引,如果在迴圈執行完後沒有退出函式的話,就返回false。為 var count 0 計數 function looku...
查詢演算法 二分查詢法
二分查詢法是經典的入門演算法,以高效和廣泛應用而著稱.演算法是由靜態方法rank 實現的,它接受乙個整數鍵和乙個已經有序的int 陣列作為引數。如果該鍵存在於陣列中 則返回它的索引,否則返回 1。演算法使用兩個變數low 和high,並保證如果鍵在陣列中則它一定在 a low high 中,然後方法...