顺序查找和二分查找

顺序查找(算法思想):
从待查找数据的第一个元素开始,逐个将每个元素与要查找的数据值进行对比:如果比较到两者值相同,则查找成功,如果一直未找到,则查找失败

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)

猜你喜欢

转载自blog.csdn.net/zhangshuaijun123/article/details/84842580
今日推荐