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