查找算法基础

本文深入讲解了两种查找算法——顺序查找和折半查找(二分查找)。顺序查找适合无序数据集,通过遍历逐一比较目标值;而折半查找适用于有序数据集,通过不断缩小搜索范围提高查找效率。文章提供了Python实现示例,帮助读者理解算法原理。
摘要由CSDN通过智能技术生成

算法

查找算法
查找算法:根据给定的值,在待查找的范围中确认是否存在某一数据于指定值相同
1.顺序查找:从待查找的数据中第一个元素开始,逐个将每个元素值与指定的值进行对比
特点:不要求本身有序,但数据量大时效率低

# 原始数据 - value
# 待查找数据 - key
def linear(value, key):
    # a=0
    # for i in value:
    #     a += 1
    #     if i == key:
    #         return a
    # else:
    #     return -1
    for i in range(len(value)):
        if value[i] == key:
            return i
    else:
        return -1

values = [3, 6, 9, 1, 4, 7, 8, 2, 10, 5, 11, 13, 12]
key = 6
res = linear(values, key)
if res == -1:
    print('查找失败')
else:
    print('查找成功,对应下标值:', res)

2.折半查找(二分查找):(在有序数据集合中查找数据,默认从小到大排序)找出有序数据中的中间元素,由中间元素将源数据分为左右两部分。比较中间值与指定值大小,来确定向左还是向右查找。如此递归下去,直至找到指定值。

循环实现二分查找算法:

def binary(value,key):
    left = 0
    right = len(value) - 1
    while left <= right:
        middle = (left + right)//2
        if value == middle:
            return middle
        elif value <= middle:
            right = middle - 1
        else:
            left = middle + 1
    return -1

values = [1,2,3,4,5,6,7,8,9,10]
key = 6
res = binary(values,key)
if res == -1:
    print("查找失败")
else:
    print("成功",res)

迭代实现二分查找

def binary(value,key,left,right):
    if left >= right:
        return -1
    middle = (left + right) // 2
    if value[middle] == key:
        return middle
    elif value[middle] >= key:
        return binary(value,key,left,middle -1)
    else:
        return binary(value,key,middle + 1,right)

values = [1,2,3,4,5,6,7,8,9,10]
key = 6
res = binary(values,key,0,len(values)-1)
if res == -1:
    print("失败")
else:
    print("成功",res)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值