二分查詢 Python實現

2021-08-28 22:07:24 字數 1188 閱讀 4266

二分查詢也稱折半查詢(binary search),它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。

首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

1.必須採用順序儲存結構。

2.必須按關鍵字大小有序排列。

計算公式:

當順序表有n個關鍵字時:

查詢失敗時,至少比較a次關鍵字;查詢成功時,最多比較關鍵字次數是b。

注意:a,b,n均為正整數。

時間複雜度無非就是while迴圈的次數!

總共有n個元素,

漸漸跟下去就是n,n/2,n/4,....n/2^k(接下來操作元素的剩餘個數),其中k就是迴圈的次數

由於你n/2^k取整後》=1

即令n/2^k=1

可得k=log2n,(是以2為底,n的對數)

所以時間複雜度可以表示o(h)=o(log2n)

python實現:

"""二分查詢"""

def bin_sea(data_list, val):

low = 0 # 最小數下標

high = len(data_list) - 1 # 最大數下標

while low <= high:

mid = (low + high) // 2 # 中間數下標

if data_list[mid] == val: # 如果中間數下標等於val, 返回

return mid

elif data_list[mid] > val: # 如果val在中間數左邊, 移動high下標

high = mid - 1

else: # 如果val在中間數右邊, 移動low下標

low = mid + 1

return # val不存在, 返回none

ret = bin_sea(list(range(1, 10)), 3)

print(ret)

Python實現二分查詢

二分查詢 二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表...

Python實現二分查詢

二分查詢 每次能夠排除掉一半的資料,查詢的效率非常高,但是侷限性比較大。必須是有序序列才可以使用二分查詢。1.非遞迴演算法 def binary search lis,nun left 0 right len lis 1 while left right 迴圈條件 mid left right 2 ...

二分查詢Python實現

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...