数据结构与算法python版(3)-列表顺序查找和二分查找(折半查找)

  • 查找:在一些数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程

  • 列表查找:从列表中查找指定的元素

    • 输入:列表中的待查找的元素
    • 输出:找到的元素的下标,如果未找到,一般返回None或者-1
    • python中查找的内置方法:index()
  • 顺序查找代码实现如下:

def linear_search(data,elem):
    for index,val in enumerate(data):
        if elem == val:
            return index

    return -1

if __name__=="__main__":
    a=[1,2,3,4,5,6,7,8,9,0]
    index=linear_search(a,9)
    print("线性查找到的元素位置:",index)

执行结果如下:

线性查找到的元素位置: 8
  • 顺序查找的时间复杂度为O(n)

  • 二分查找:又叫折半查找,二分查找的前提是列表有序,通过对待查找的值不断的和中间值比较,使得查找的范围不断减半

  • 代码实现如下:

def binary_search(data,elem):
    left=0
    right=len(data)-1
    mid=(left+right)//2
    while left<=right:
        if elem==data[mid]:
            return mid
        elif elem>data[mid]:
            left=mid
            mid=(left+right)//2
        else:
            right=mid
            mid=(left+right)//2
    return -1

if __name__=="__main__":
    a=[1,2,3,4,5,6,7,8,9,0]
    index=binary_search(a,9)
    print("线性查找到的元素位置:",index)

执行结果如下:

线性查找到的元素位置: 8
  • 二分查找的复杂度为O(logn)

  • 通过以上分析可以发现,当列表元素有序时,查找使用二分查找明显是最快的,如果列表无需,则可以考虑使用顺序查找,因为如果先将列表排序,则排序的时间复杂度一般都是大于 O(n)的

  • python的内置方法index()使用的就是线性查找,虽然二分查找很快,但是二分查找要求列表必须有序,而排序的复杂度比O(n)要打,而index()方法根本不知道列表是否有序,因此它使用的顺序查找,时间复杂度为O(n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值