維基百科:
在電腦科學中,二分搜尋(英語: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('請輸入資料!')
值得注意的是二分查詢雖然時間複雜度低 但是內建函式index使用的是線性查詢,因為二分查詢的條件是必須有序。# 二分查詢
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('請輸入資料!')
Python實現二分查詢
二分查詢 二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表...
Python實現二分查詢
二分查詢 每次能夠排除掉一半的資料,查詢的效率非常高,但是侷限性比較大。必須是有序序列才可以使用二分查詢。1.非遞迴演算法 def binary search lis,nun left 0 right len lis 1 while left right 迴圈條件 mid left right 2 ...
二分查詢 Python實現
二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,...