二分查詢及python實現

2021-08-07 04:48:45 字數 1551 閱讀 2965

首先介紹二分查詢,然後介紹其python實現(**返回查詢的次數,這也是很多筆試題會問到的)。

二分法:也稱二分搜尋(binary search)、折半搜尋(half-interval search)、對數搜尋(logarithmic search),是一種在有序陣列中查詢某一特定元素的搜尋演算法。

二分查詢的實現步驟:

1.首先查詢陣列必須是有序的(假設為公升序)。

2.取查詢陣列中間的數作為基準,如果這個基準等於所要查詢的數則結束搜尋,如果需要查詢的資料大於基準說明該數存在於陣列的左邊。反之存在於基準右邊。

3 假設待查詢的數小於基準,那麼將基準換成左子陣列的中間的數,重複步驟2,直到找到該數。如果待查的數大於基準則將基準換成右子陣列中間的數,重複步驟2.

python實現(python3):

輸入為排好序的一組數,以空格隔開。以及需要查詢的數。

輸出為查詢次數(如果沒有查詢到則輸出none)。

__author__ = "allen liu"

__time__ = "2017/8/20"

'''this program used to '''

set_in = input().split(' ') #獲得輸入有序陣列

num_serch = int(input()) #獲得需要查詢的數

set_in = [int(i) for i in set_in] #將輸入的字元元素轉化成整數

def binary_search(set_search, key_search):

# 獲得輸入陣列的排列順序

if set_search[len(set_search) - 1] > set_search[0]:

ord_indicator = true # true表示陣列按照從小到大的順序

else:

ord_indicator = false # false表示陣列按照從大到小的順序

left = 0 #給定查詢的左邊界初始值

right = len(set_search) - 1 #給定查詢的右邊界初始值

count = 0 #用於記錄查詢次數

while left <= right:

count += 1

mid = (left + right) // 2

if set_search[mid] == key_search:

return count

elif set_search[mid] < key_search:

if ord_indicator == true: #注意遞增數列和遞減數列的操作不同

left = mid + 1

else:

right = mid - 1

else:

if ord_indicator == true:

right = mid - 1

else:

left = mid + 1

return none #沒有找到返回none

print(binary_search(set_in, num_serch))

Python實現二分查詢

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

Python實現二分查詢

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

二分查詢 Python實現

二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,...