顺序查找与二分查找(python)

查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找。

1. 顺序查找

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

代码如下:

def linear_search(li, val):
    for ind, v in enumerate(li):
        if v == val:
            return ind
    else:
        return None

时间复杂度为O(n)

2. 二分查找

二分查找又称折半查找,仅适用于有序的顺序表。

基本思想:首先将给定值key与表中中间位置的元素比较,若相等,则查找成功,返回该元素的存储位置;若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分。然后缩小的范围内继续进行同样的查找,如此重复,直到找到为止,或确定表中没有所需要查找的元素,则查找不成功,返回查找失败的信息。

def binary_search(li, val):
    left = 0
    right = len(li) - 1
    while left <= right:    # 候选区有值
        mid = (left + right) // 2
        if li[mid] == val:
            return mid
        elif li[mid] > val: # 带查找的值在mid左侧
            right = mid - 1
        else: # li[mid] < val 带查找的值在mid右侧
            left = mid + 1
    else:
        return None

时间复杂度为O(logn)

3. 补充

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

语法:enumerate(sequence, [start=0])

参数:

  • sequence – 一个序列、迭代器或其他支持迭代对象。
  • start – 下标起始位置的值。

返回值:返回 enumerate(枚举) 对象。

示例代码如下所示:

li = ['one', 'two', 'three']
for i, element in enumerate(li):
	print i, element

得到结果如下:
0 one
1 two
2 three

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值