1.Python的顺序查找和二分查找

文章介绍了两种主要的查找方法:顺序查找(LinearSearch),从列表开始逐个比较直到找到元素或搜索完整个列表;以及二分查找(BinarySearch),适用于有序列表,通过比较中间值缩小查找范围,效率高于顺序查找。

1.1 查找的概念

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

列表查找(线性表查找):从列表中查找指定元素

  • 输入:列表、待查找元素
  • 输出:元素下标(未找到元素时一般返回None或者-1)

内置列表查找函数:index(),这个一定是顺序查找

1.2 顺序查找(Linear Search)

顺序查找也叫线性查找,从列表第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表最后一个元素为止。(从头找到尾)

# 顺序查找
def linear_search(list1, x):
    # numerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
    for idx, value in enumerate(list1):
        # 搜寻元素,判断是否找到了要搜寻的元素
        if value == x:
            return idx  # 找到了返回下idx
        else:
            return None  # 没找到

1.3 折半查找(Binary Search)

二分查找又叫折半查找。从有序列表的初始候选区list1[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。

# 二分查找(折半查找)
def binary_search(list1, x):
    left = 0
    right = len(list1) - 1
    # 证明候选区有值
    while left <= right:
        mid = (left + right) // 2  # //为向下取整
        if list1[mid] == x:
            return mid
        # 证明要找的数在mid的左侧
        elif list1[mid] > x:
            right = mid - 1
        else:  # list1[mid] < x,待查找的值在mid右侧
            left = mid + 1
    else:
        return None
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(binary_search(list1, 3))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秃头少女Emily

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值