先用圖展示一下二分搜尋演算法的原理
二分搜尋演算法又稱為折半搜尋,下面**實現的是輸出要搜尋資料在陣列中的位置和查詢的次數:
演算法的步驟:
給乙個帶有n個值的陣列,陣列a是從小到大的排列
需要查詢t值在陣列的中的位置
1、先令l為0,r為n-1
2、如果存在l>r,則不需進行搜尋
3、令m(中間元素)為[(l+r)/2]
4、如果amt,令r=m-1返回第二步
6、當am=t時回傳值m
#迭代版本
n=
0def
dichotomy
(arr,start,end,key)
:global n #如果要在函式中給全域性變數賦值,需要用global關鍵字宣告
n+=1if end
return-1
mid=start+
int(
(end-start)/2
)if arr[mid]
return dichotomy(arr,mid+
1,end,key)
elif arr[mid]
>key:
return dichotomy(arr,start,mid-
1,key)
else
:return mid,n
#while的方法進行查詢
def
dichotomy_search
(arr,start,end,key)
: n=
0while start<=end:
n+=1 mid=start+
int(
(end-start)/2
)if arr[mid]
start=mid+
1elif arr[mid]
>key:
end=mid-
1else
:return mid ,n
arr=[1
,2,3
,4,5
,6,7
,9,11
,12,15
,17,20
,21,23
]a,b=dichotomy(arr,0,
14,3)
print
("方法一:\n查詢的位置:%d\n查詢的次數:%d\n"
%(a,b)
)c,d=dichotomy_search(arr,0,
14,17)
print
("方法二:\n查詢的位置:%d\n查詢的次數:%d\n"
%(c,d)
)
輸出的結果:
方法一:
查詢的位置:2
查詢的次數:4
方法二:
查詢的位置:11
查詢的次數:2
二分搜尋演算法
今天我勉強搞懂了二分查詢演算法,我覺得很有收穫,這是個不錯的演算法,希望還不知道 不懂二分演算法的朋友能看看!二分查詢 二分查詢的前提是陣列一定是有序的 傳入乙個陣列 t 傳入乙個查詢元素 t key 返回查詢結果 class myutil else if key.compareto x mid 0...
二分搜尋演算法
在電腦科學中,二分搜尋 英語 binary search 也稱折半搜尋 英語 half interval search 對數搜尋 英語 logarithmic search 是一 種在有序陣列中查詢某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束...
二分搜尋演算法
1.x y 2與x y x 2區別 運算子 取整朝零方向取整,5 2 2,5 2 2 用x y x 2好處是確保分界點總是靠近區間起點 2.基本二分查詢的實現方法 int bsearch int a,int x,int y,int v return 1 3.設lower bound和upper bo...