二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
def
binary_search
(alist, item):
if len(alist) == 0:
return
false
else:
midpoint = len(alist) // 2
if alist[midpoint] == item:
return
true
else:
if item < alist[midpoint]:
return binary_search(alist[:midpoint], item)
else:
return binary_search(alist[midpoint+1:], item)
testlist = [0, 5, 6, 8, 44, 56, 85, 86, 89, 92, 94, 98, 102]
print(binary_search(testlist, 44))
print(binary_search(testlist, 45))
def
binary_search
(alist, item):
first = 0
last = len(alist) - 1
while first < last:
midpoint = round((first + last) / 2)
if alist[midpoint] == item:
return
true
elif item < alist[midpoint]:
last = midpoint - 1
else:
first = midpoint + 1
return
false
最優時間複雜度:o(1)
最壞時間複雜度:o(logn)
二分搜尋演算法,Java實現
這裡用遞迴和非遞迴的方式實現了二分搜尋 ps 二分搜尋是對已經排序完成的陣列進行搜尋定位,我這裡是以公升序排列為例,可用歸併排序等演算法進行排序 可見我其他博文 二分搜尋演算法,通過比較順序列表中間元素的值,迅速縮小規模查詢元素,時間複雜度為 o n logn public class binary...
二分搜尋演算法
今天我勉強搞懂了二分查詢演算法,我覺得很有收穫,這是個不錯的演算法,希望還不知道 不懂二分演算法的朋友能看看!二分查詢 二分查詢的前提是陣列一定是有序的 傳入乙個陣列 t 傳入乙個查詢元素 t key 返回查詢結果 class myutil else if key.compareto x mid 0...
二分搜尋演算法
在電腦科學中,二分搜尋 英語 binary search 也稱折半搜尋 英語 half interval search 對數搜尋 英語 logarithmic search 是一 種在有序陣列中查詢某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束...