列表查詢及二分查詢

2022-09-15 17:45:07 字數 1991 閱讀 6419

描述順序查詢與二分法(折半搜尋)的概念以及用python實現其查詢流程

1. 什麼是順序查詢

當資料儲存在諸如列表的集合中時,我們說這些資料具有線性或順序關係。 每個資料元素都儲存在相對於其他資料元素的位置。 由於這些索引值是有序的,我們可以按順序訪問它們。 這個過程產實現的搜尋即為順序查詢。
2. 順序查詢原理剖析:

從列表中的第乙個元素開始,我們按照基本的順序排序,簡單地從乙個元素移動到另乙個元素,直到找到我們正在尋找的元素或遍歷完整個列表。如果我們遍歷完整個列表,則說明正在搜尋的元素不存在。
3. **實現

該函式需要乙個列表和我們正在尋找的元素作為引數,並返回乙個是否存在的布林值。found 布林變數初始化為 false,如果我們發現列表中的元素,則賦值為 true。

# 最常見的就是for遍歷列表的順序查詢演算法

# 時間複雜度o(n)

#question: given a sorted list of numbers, find the index of a specific value in the list. if no such value, return -1.

def sequential_search(lis, key):

for i in range(len(lis)):

if lis[i] == key:

return i

else: #注意else的縮排位置,與if並列的話都會返回false

return false

alist = [1, 5, 8, 123, 22, 54, 7, 99, 300, 222]

result = sequential_search(alist, 123)

print(result)

#輸出結果

3

1. 演算法原理
在查詢表中不斷取中間元素與查詢值進行比較,以二分之一的倍率進行表範圍的縮小。

查詢表型別:有序表查詢,查詢表中的資料必須按某個主鍵進行某種排序。

2. 演算法分析

由此可得演算法時間複雜度為o(logn),比o(n)更優

3.**實現

def middle(alist,item):

if len(alist) == 0: #判斷邊界條件

return -1

#列表的起始點和終點

find = false

low = 0

high = len(alist)-1

while not find and low <= high:

mid = (low+high)//2 #中間元素下標

#插好的值大於了中間元素的值,意味著查詢的值只可能出現在中間元素的右側

if item > alist[mid]:

low = mid + 1

elif item == alist[mid]:#查詢的值和中間元素值相等,意味著找到了

find = true

else:#查詢的值小於中間元素,意味著查詢的值只可能出現中間元素的左側

high = mid - 1

return find

alist = [1,2,3,4,5,6,7]

print(middle(alist,7))

# 輸出結果

true

待補充

列表查詢以及二分查詢

一 列表查詢 1 列表查詢 從列表中查詢指定元素 2 順序查詢 從列表第乙個元素開始,順序進行搜尋,直到找到為止。返回找到的那個索引 3 二分查詢 從有序列表的候選區data 0 n 開始,通過對待查詢的值與候選區中間值的比較,可以使候選區減少一半。二分查詢 時間複雜度是o logn 二分查詢的前提...

列表查詢以及二分查詢

一 列表查詢 1 列表查詢 從列表中查詢指定元素 2 順序查詢 從列表第乙個元素開始,順序進行搜尋,直到找到為止。返回找到的那個索引 3 二分查詢 從有序列表的候選區data 0 n 開始,通過對待查詢的值與候選區中間值的比較,可以使候選區減少一半。二分查詢 時間複雜度是o logn 二分查詢的前提...

二分查詢及變種二分查詢

二分查詢也稱折半查詢 binary search 它的查詢效率很好。二分查詢有乙個要求是必須採用順序儲存結構,而且表種的元素是有序的。只有滿足這個條件我們才能使用二分查詢。查詢條件 查詢區域的左邊界,小於等於查詢區域的右邊界 查詢過程 1.迴圈條件 查詢條件 2.計算序列中間下標位置 3.如果待查詢...