1. 程式人生 > >順序查詢和二分查詢

順序查詢和二分查詢

順序查詢(演算法思想):
從待查詢資料的第一個元素開始,逐個將每個元素與要查詢的資料值進行對比:如果比較到兩者值相同,則查詢成功,如果一直未找到,則查詢失敗

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)