順序查詢和二分查詢
阿新 • • 發佈:2018-12-08
順序查詢(演算法思想):
從待查詢資料的第一個元素開始,逐個將每個元素與要查詢的資料值進行對比:如果比較到兩者值相同,則查詢成功,如果一直未找到,則查詢失敗
def Linear(values, key): leng = len(values) for i in range(leng): if values[i] == key: return "查詢成功:%d" % i else: return "查詢失敗" values = [8, 9, 6, 5, 7, 2, 3, 1, 4, 10, 13, 12, 11] print(Linear(values, 7))
二分查詢(演算法思想):
找出“有序資料”中的中間元素,有中間元素值將原資料分成兩個子表,然後根據指定查詢值與中間元素的大小關係進行對比:若相對
則查詢成功,若大於則在右邊進行查詢,若小於則在左邊進行查詢
# 遞迴法 def twofen_sort(values, key , left, right): if left > right: return -1 middle = (left + right) // 2 if key == values[middle]: return 1 else: if key > values[left]: left = middle +1 return twofen_sort(values, key, left, right) else: right = middle -1 return twofen_sort(values, key, left, right) values = [8, 9, 6, 5, 7, 2, 3, 1, 4, 10, 13, 12, 11] values.sort() # 進行排序 leng = len(values) result = twofen_sort(values, 7, 0, leng - 1) if result == 1: print("查詢成功") else: print("查詢失敗")
# 迴圈法 def binary(values, key): left = 0 right = len(values) - 1 while left <= right: middle = (left + right) // 2 if values[middle] == key: # 成功找到返回下標 return middle elif values[middle] > key: # 在左側查詢 right = middle - 1 else: # 在右側查詢 left = middle + 1 return -1 values = [2, 4, 8, 9, 41, 54, 84, 98] result = binary(values, 54) if result == -1: print("查詢失敗") else: print("查詢成功:", result)