python 資料結構與演算法 day06 二分查詢

2022-02-06 18:24:10 字數 1296 閱讀 9553

又稱折半查詢,把要查詢的元素跟序列中中間位置的元素進行比較,如果比中間位置元素小,就從序列的左半部分查詢,反之,從序列的右半部分查詢,對折半後的序列再按照類似比較中間元素折半的方法查詢;

二分查詢要求序列是支援索引的,所以也就是作用物件是順序表,然後要求原始的序列必須是有序的;

def

binary_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)) #

二分查詢要求作用的物件是有序的陣列(順序表--支援索引)

def

binary_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 實現...