算法入门--Day2

第二块内容

什么是列表查找

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

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

    输入:列表,待查找元素

    输出:元素下标

  内置函数:index()

顺序查找

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

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

  其时间复杂度为 O(n)

  

二分查找

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

  简单说就是找到有序列表的中间值,根据带查找数值与中间值的比较进行查找

  补:有序列表每一次分割留下的部分就叫做候选区

def  binary_search(li,val):
    left = 0  # 左侧元素下标    
    right = len(li) - 1   # 右侧元素下标
    which left <= right: #只有right>=left 的时候才可能会有待查找的值
mid = (left + right)//2  #确定中间值的下标 if li[mid] < val: left = mid + 1   elif li[mid] > val: right = mid - 1 else: return mid else: return None

  

二分查找与顺序查找的比较

  顺序查找时间复杂度为:O(n)

  二分查找的时间复杂度为:O(logn)

  如果想测试其运行时间,可以给两个函数均增加一个统计时间的装饰器即可

  根据时间复杂度或者自己的实验都可以表明,二分法的查找效率比较高,但是二分法列表查找的前提必须是有序列表

posted @ 2019-06-20 20:20  功夫熊猫、阿辉  阅读(108)  评论(0)    收藏  举报