Python實現順序查詢 二分查詢

2021-09-02 17:54:45 字數 1451 閱讀 1235

從待查詢資料的第乙個元素開始,逐個將每個元素與要查詢的資料值進行對比,如果比較到兩者相同,則查詢成功;如果一直到最後都未找到,則查詢失敗。

# 順序查詢

# 待查詢資料集合 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 ...