描述順序查詢與二分法(折半搜尋)的概念以及用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.如果待查詢...