二分查詢 Python實現(迴圈 遞迴)

2021-09-25 23:25:42 字數 2267 閱讀 3453

維基百科:

在電腦科學中,二分搜尋(英語:binary search),也稱折半搜尋(英語:half-interval search),對數搜尋(英語:logarithmic search),是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半。

二分搜尋演算法

分類搜尋演算法資料結構陣列

最壞時間複雜度

最優時間複雜度

平均時間複雜度

最壞空間複雜度迭代:

遞迴:二分搜尋在情況下的複雜度是對數時間,進行 次比較操作( 在此處是陣列的元素數量, 是大o記號, 是對數)。二分搜尋使用常數空間,無論對任何大小的輸入資料,演算法使用的空間都是一樣的。

除非輸入資料數量很少,否則二分搜尋比線性搜尋更快,但陣列必須事先被排序。

二分搜尋只對有序陣列有效

&&不囉嗦了,上**&&

# 二分查詢(while)

def binary_search(li,n):

left = 0

right = len(li) - 1

while left <= right:

mid = (right + left) // 2

if li[mid] < n:

left = mid +1

elif li[mid] > n:

right = mid - 1

else:

return mid

return 0

li =

while 1:

a = input('請輸入您要查詢的數字,回車輸入選乙個資料,#結束:')

if a=='#':

break

a = int(a)

li.sort()#二分查詢的條件是要有序

print(li)

while 1:

x = input('請輸入您要查詢的數字:')

if x:

x = int(x)

result = binary_search(li, x)

if result == 0:

print('抱歉,您要查詢的數字不在您所輸入的數字集中!')

else:

print(f'您要查詢的數字的索引是')

else:

print('請輸入資料!')

# 二分查詢

def binary_search(li,n,left,right):

if left <= right:#遞迴可以執行的條件

mid = (right + left) // 2

if li[mid] < n:

return binary_search(li,n,mid+1,right)

elif li[mid] > n:

return binary_search(li,n,left,mid-1)

else:

return mid

else:

return -1

li =

while 1:

a = input('請輸入您要查詢的數字,#結束:')

if a=='#':

break

a = int(a)

print(f'您所輸入的資料是')

li.sort()#二分查詢的條件是要有序

print(f'排完序是')

while 1:

x = input('請輸入您要查詢的數字:')

if x:

x = int(x)

left = 0

right = len(li) - 1

result = binary_search(li, x, left, right)

if result == -1:

print('抱歉,您要查詢的數字不在您所輸入的數字集中!')

else:

print(f'您要查詢的數字的索引是!')

else:

print('請輸入資料!')

值得注意的是二分查詢雖然時間複雜度低 但是內建函式index使用的是線性查詢,因為二分查詢的條件是必須有序。

Python實現二分查詢

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

Python實現二分查詢

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

二分查詢 Python實現

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