老卫带你学---必须手撕的三种查找算法(干货!!!附python代码)

如果老卫的博客对你有帮助,记得点赞关注哈!大家的支持是老卫更新的动力!!

1.顺序查找
顺序查找就是将数组中的元素与待查找值一一比较,然后直到找到为止。优点仅在于不需要额外的处理,缺点是查询速度太慢。

def sequential_search(nums:list,val:int):
    for i in nums:
        if(i==val):
            return i

2.二分查找
对于已排好序的数组,我们可以采用二分查找法来进行查找。将待查找值与数组中间的数进行比较,如果小于中间值,则数值在左子数组中,否则在右子数组中。不断迭代,知道找到为止。

def binary_search(nums:list,val:int):
    low=0
    high=len(nums)-1
    while(low<=high and val!=-1):
        mid=(low+high)//2
        if(val<nums[mid]):
            high=mid-1
        elif(val>nums[mid]):
            low=mid+1
        else:
            return mid
    return -1

3.插值查找法
插值查找法是二分查找法的改进。按照数据位置的分布,利用公式预测数据所在的位置,再以二分查找法渐渐逼近。

def insert_search(nums:list,val:int):
    low=0
    high=len(nums)-1
    while(low<=high and val!=-1):
        mid=low+int(((val-nums[low])/(nums[high]-nums[low]))*(high-low))
        if(val<nums[mid]):
            high=mid-1
        elif(val>nums[mid]):
            low=mid+1
        else:
            return mid
    return -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值