作用:二分查詢適用於有序的的陣列或列表中,如果列表及陣列中有n個元素,通過二分查詢查詢某一元素的位置需要的步驟是log2(n)(注:該log的底數是2)
defbinary_search(list,item):
low =0
high = len(list)-1 #
python陣列id從0開始,與matlab不同、
t =0
while low <=high:
t = t + 1;
mid = round((low + high)/2)
guess =list[mid]
if guess ==item:
return
(mid,t)
if guess >item:
high = mid-1
else
: low = mid + 1
return none #
python關鍵字none,相當於matlab的nan
my_list = range(1,101)
value = binary_search(my_list,1)
print ("
search num:
",value[1],'
index position
',value[0])
執行後結果:
search num: 6 index position 0
注意事項:
函式實現**:
function [count,out] =binary_search(list,item)%list:所要查詢的陣列一維行向量
%item:查詢的元素
low = 1;
high =length(list);
t = 0;
while low <=high
t = t+1;
mid = round((low+high)/2);
guess = list(1,mid);
if guess ==item
out =mid;
count =t;
break
;
else
if guess >item
high = mid - 1;
if highout = 'none'
;
break
; end
else
low = mid + 1;
if highout = 'none'
;
break
; end
endend
end
測試用**:
n = 100;data =randperm(n);
data =sort(data);
[t,v] = binary_search(data,100);
str = ['search num:',num2str(t),'; ','index position:'
,num2str(v)];
disp(str);
執行後結果:
search num:6; index position:100
注意事項
二分查詢 Binary Search
打算重返c c 陣營,所以準備從演算法開始溫習,今天我們談到的是一種效率較高的查詢方法 二分查詢。什麼是二分查詢 二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 線性表是有序表,即表中結點按關鍵字有序,並且要用向量作為表的儲存結構。二分查詢的基本思想是 1 首先確定該區間的中點位置 ...
二分查詢 BinarySearch
前置條件 乙個有序的序列 假設公升序排列 在序列中查詢指定元素 演算法 首先與序列中間的元素進行比較,如果大於這個元素,就在當前序列的後半部分繼續查詢,如果小於這個元素,就在當前序列的前半部分繼續查詢,直到找到相同的元素,或者所查詢的序列範圍為空為止。int binarysearch vector ...
二分查詢 BinarySearch
二分查詢又稱為折半查詢 首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢...