二分查找也稱折半查找,它是一種效率較高的查找方法。但是,折半查找要求線性表必須采用順序存儲(chǔ)結(jié)構(gòu),而且表中元素按關(guān)鍵字有序排列。
pdl二分查找充分利用了序列元素的遞增性質(zhì),采用分治策略搜索目標(biāo)值(目標(biāo)值存在于序列中),目標(biāo)值的左邊界和右邊界(目標(biāo)值不存在于序列中),其中左邊界指的是最大的小于目標(biāo)值的元素,右邊界指的是最小的大于目標(biāo)值的元素。
二分查找法最壞情況
n個(gè)數(shù), 比較中間的數(shù),一次去掉一半,余下n/2個(gè)
n/2個(gè)數(shù), 再比較中間的數(shù),一次去掉一半,余下n/4個(gè)
n/4個(gè)數(shù), 再比較中間的數(shù),一次去掉一半,余下n/8個(gè)
n/8個(gè)數(shù), 再比較中間的數(shù),一次去掉一半,余下n/16個(gè)
二分查找和分塊查找順序查找相當(dāng)于遍歷數(shù)組的所有元組,所以不需要排序二分查找需要排序,因?yàn)槊看味际呛椭虚g值比較,如果大于選中間值后面的部分繼續(xù)二分查找,如果小于中間值則選前面的部分繼續(xù)執(zhí)行分塊查找中需要按照數(shù)值大小進(jìn)行排序分塊,雖然每個(gè)塊中的大小可以不排序,但是塊的取值區(qū)間是排序的。
二分查找算法是一種快速的查找算法。當(dāng)我們?cè)僖粋€(gè)數(shù)組中查找是否存在某個(gè)數(shù)時(shí),通常是直接遍歷這個(gè)數(shù)組直到找到這個(gè)數(shù),時(shí)間復(fù)雜度為O(n)試想如果數(shù)據(jù)量很大,這里可以用一種簡(jiǎn)單快速的的查找算法--二分查找算法,也叫做折半查找算法。
二分查找算法,也稱為折半查找,是一種在有序數(shù)組中查找特定元素的搜索算法。它的思想是每次拿數(shù)組中間的值和目標(biāo)值進(jìn)行比較,不斷縮小查找范圍。
以下是用Python編寫的簡(jiǎn)單的二分查找算法示例:
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
在使用二分查找算法時(shí),需要保證操作的數(shù)組是有序的。只有在有序的數(shù)組中才能利用二分查找的優(yōu)勢(shì)。
注意:二分查找算法主要應(yīng)用于靜態(tài)查找表,不適用于頻繁變動(dòng)的數(shù)組。
二分查找算法的時(shí)間復(fù)雜度為O(log n),其中n是數(shù)組的長(zhǎng)度。這使得它成為一種高效的查找算法。
通過這篇文章,你不僅了解了二分查找算法的原理和Python實(shí)現(xiàn)的代碼示例,還掌握了它的適用范圍和時(shí)間復(fù)雜度。希望這對(duì)你理解和應(yīng)用二分查找算法有所幫助。
感謝你閱讀本文,希望對(duì)你有所幫助!
順序查找的基本思想:
就是遍歷整個(gè)列表,逐個(gè)進(jìn)行記錄的關(guān)鍵字與給定值比較,若某個(gè)記錄的關(guān)鍵字和給定值相等,則查找成功,找到所查的記錄。如果直到最后一個(gè)記錄,其關(guān)鍵字和給定值比較都不等時(shí),則表中沒有所查的記錄,查找失敗。
二分查找的基本思想是:
在有序表中,取中間記錄作為比較對(duì)象,若給定值與中間記錄的關(guān)鍵字相等,則查找成功;若給定值小于中間記錄的關(guān)鍵字,則在中間記錄的左半?yún)^(qū)繼續(xù)查找;若給定值大于中間記錄的關(guān)鍵字,則在中間記錄的右半?yún)^(qū)繼續(xù)查找。不斷重復(fù)上述過程,直到找到為止。
因?yàn)槎植檎铱梢院苡行У目s短查找時(shí)間,提高查找效率,非常實(shí)用的方法
不是同一個(gè)概念。折半是對(duì)半成百分之五十。二分是百分之二十。
二分法就是一種在有序數(shù)組中查找某一特定元素的搜索算法。