從待查詢資料的第乙個元素開始,逐個將每個元素與要查詢的資料值進行對比,如果比較到兩者相同,則查詢成功;如果一直到最後都未找到,則查詢失敗。
# 順序查詢
# 待查詢資料集合 value
# 查詢的值 key
def linear(value,key):
for i in range(len(value)):
if value[i] == key:
# 成功,返回下標值
return i
# 失敗,返回-1
return -1
values = [9,1,11,3,2,6,7,5,8,13,4,10,12]
# 查詢 7
result = linear(values,7)
if result == -1:
print('查詢失敗')
else:
print('查詢成功,對應下標為',result)
---------- 執行 ----------
查詢成功,對應下標為 6
找出「有序資料」中的中間元素,有中間元素值將元資料分為兩個字表,然後根據指定查詢值與中間元素的大小關係進行比對,若相對,則查詢成功,若查詢值小於中間元素,則在左側子表中繼續查詢;若查詢值大於中間元素,則在右側子表中繼續查詢。如此遞迴查詢下去,直接查詢成功或查詢完整個資料集合為止(折半查詢)
# 二分查詢
# 待查詢資料集合 - 》 value
# 要查詢的數值 - 》key
# 限定查詢範圍的左側元素下標值 - left
# 限定查詢範圍的右側元素下標值 - right
def binary(value,key,left,right):
if left > right:
# 查詢失敗
return -1
middle = (left+right)//2
if value[middle] < key:
left = middle + 1
return binary(value,key,left,right)
elif value[middle] > key:
right = middle - 1
return binary(value,key,left,right)
else:
return middle
values = [3,9,10,12,25,34,45,56,67,76,84,99]
result = binary(values,25,0,len(values)-1)
if result == -1:
print('查詢失敗')
else:
print('查詢成功,對應下標為',result)
---------- 執行 ----------
查詢成功,對應下標為 6
順序查詢 二分查詢
順序查詢 適用範圍 沒有進行排序的資料序列 缺點 速度非常慢,效率為o n cpp view plain copy 在code上檢視 片派生到我的 片 實現 template type sequencesearch type begin,type end,const type searchvalue...
Python實現二分查詢
二分查詢 二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表...
Python實現二分查詢
二分查詢 每次能夠排除掉一半的資料,查詢的效率非常高,但是侷限性比較大。必須是有序序列才可以使用二分查詢。1.非遞迴演算法 def binary search lis,nun left 0 right len lis 1 while left right 迴圈條件 mid left right 2 ...