又稱折半查詢,把要查詢的元素跟序列中中間位置的元素進行比較,如果比中間位置元素小,就從序列的左半部分查詢,反之,從序列的右半部分查詢,對折半後的序列再按照類似比較中間元素折半的方法查詢;
二分查詢要求序列是支援索引的,所以也就是作用物件是順序表,然後要求原始的序列必須是有序的;
defbinary_search(l,item):
"""二分查詢(遞迴)
"""n=len(l)
mid=n//2 #
所查詢的序列的中間位置索引
while n>0:
if itemreturn
binary_search(l[:mid],item)
elif item>l[mid]:
return binary_search(l[mid+1:],item)
else
:
return
true
return
false
l=[1,4,7,9,23,56,78,89]
print(binary_search(l,56)) #
二分查詢要求作用的物件是有序的陣列(順序表--支援索引)
defbinary_search(l,item):
"""二分查詢,非遞迴版本
"""n=len(l)
first=0
last=n-1
while first<=last:
mid = (first + last) // 2 #
中間位置的元素
if itemlast=mid-1
elif item>l[mid]:
first=mid+1
else
:
return
true
return
false
l=[1,4,7,9,23,56,78,89]
print(binary_search(l,56))
二分查詢最優時間複雜度:o(1);
最壞時間複雜度: o(log(n)----因為需要對長度為n的序列每次折半查詢,直至最終只有乙個元素 整個折半的過程經歷了2^k=n 也就是k=log(n))
相比一般的遍歷,最優時間複雜度也是o(1) 但是最壞時間複雜度卻是o(n);
python資料結構與演算法
coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...
資料結構與演算法 python
元類 基礎 冒泡 它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名氣泡排序。def bubble sort alist ...
python演算法與資料結構
若n1 n2 n3 1000,且n1平方 n2平方 n3平方 n1,n2,n3為自然數 求出所有n1 n2 n3可能的組合?n1 0 n2 0 n3 0 判斷n1 n2 n3是否等於1000,之後變n3 1,n3 2,n3 3,然後再變n2 那如果變為 n1 n2 n3 2000 了呢?思路1 實現...