python資料結構 二分查詢

2021-08-21 08:52:26 字數 1662 閱讀 6062

二分查詢

有序列表對於我們的比較是很有用的。在順序查詢中,當我們與第乙個項進行比較時,如果第乙個項不是我們要查詢的,則最多還有 n-1 個專案。 二分查詢從中間項開始,而不是按順序查詢列表。 如果該項是我們正在尋找的項,我們就完成了查詢。 如果它不是,我們可以使用列表的有序性質來消除剩餘項的一半。如果我們正在查詢的項大於中間項,就可以消除中間項以及比中間項小的一半元素。如果該項在列表中,肯定在大的那半部分。然後我們可以用大的半部分重複這個過程。從中間項開始,將其與我們正在尋找的內容進行比較。再次,我們找到元素或將列表分成兩半,消除可能的搜尋空間的另一部分。下圖展示了該演算法如何快速找到值 54 。完整的函式見codelens 3中。

建立乙個binarysearch.py檔案

# 二分法查詢

def

binarysearch(alist, item):

first =

0last =

len(alist)-

1found = false

while first <= last and not found:

midpoint =

int((first + last) /

2) if

alist[midpoint] ==

item

:found = true

else:

if item

<

alist[midpoint]:

last = midpoint -

1else:

first = midpoint +

1return found

testlist = [0, 1, 2, 8, 13, 17, 32, 42]

print(binarysearch(testlist,3))

print(binarysearch(testlist,13))

遞迴呼叫二分查詢函式

# 遞迴呼叫二分查詢

def

binarysearch(alist, item):

if len(alist) == 0:

return false

else:

midpoint = (len(alist) -

1) //

2if

alist[midpoint] ==

item

:return true

else:

if item

<

alist[midpoint]:

return binarysearch(alist[:midpoint], item)

else:

return binarysearch(alist[midpoint +

1:], item)

testlist = [0, 1, 2, 8, 13, 17, 19, 32, 54]

print(binarysearch(testlist, 3))

print(binarysearch(testlist, 13))

資料結構 二分查詢

二分查詢演算法也稱為折半搜尋 二分搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為...

資料結構 二分查詢

總共有n個元素,漸漸跟下去就是n,n 2,n 4,n 2 k 接下來操作元素的剩餘個數 其中k就是迴圈的次數。由於你n 2 k取整後 1,即令n 2 k 1,可得k log2n,是以2為底,n的對數 所以時間複雜度可以表示o o logn public class binarysearch else...

資料結構 二分查詢

二分查詢適用於有序的順序表,基本的思路是 首先將給定的關鍵字key與表array的中間位置的元素進行比較。如果相等,則查詢成功,如果不相等,則查詢的元素一定在表的前半部分或者後半部分。繼續縮小範圍到前半部分或者後半部分再進行同樣的查詢,直到找到為止,或者查完之後仍然沒有找到元素。下面給出一次演算法的...