算法——查找

一、查找

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

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

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

python中内置列表查找函数:index()。

二、顺序查找(Linear Search)

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

1、代码示例

def linear_search(li, val):
    """
    顺序查找
    :param li: 输入的列表
    :param val: 输入的待查找的元素
    :return:
    """
    for ind, v in enumerate(li):   # index和值
        if v == val:
            return ind   # 返回元素下标index
    else:
        # 循环完毕仍没找到
        return None

2、时间复杂度分析

   在这里n就是列表的长度,且并没有循环减半的过程,有一个与n相关的循环,因此时间复杂度是:O(n)

三、二分查找(Binary Search)

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

1、二分查找示例

(1)从列表中查找元素3:

  

(2)用left和right两个变量来维护候选区

  初始的时候left=0,right=n-1

  

  通过(left+right)/2求出中间元素5与3进行比较:

  

  由于5比3大,候选区修改为mid的左边,right=mid-1,完成候选区修改:

  

  计算出新的mid:(0+3)/2=1找到新的mid:

  

  2比3小说明在mid的右边,需要移动left更新候选区,left=mid+1:

  

   再次通过(2+3)/2=2找到mid的索引值:

  

  mid的值与要找的元素3一致,说明找到了,输出mid的下标。left如果大于right则候选区已经没有值了,说明找不到匹配的值。

  

猜你喜欢

转载自www.cnblogs.com/xiugeng/p/9636525.html