zoukankan      html  css  js  c++  java
  • Python查找算法之 -- 列表查找和二分查找

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

    • 输入:列表、待查找元素
    • 输出:元素下标或未查找到元素

    二、列表查找方式

    • 顺序查找 : 从列表的第一个元素开始遍历,知道找到为止。时间复杂度O(n)
    • 二分查找 :从有序的列表的候选区L[0:n]开始,通过堆待查找的值与候选区中间值进行比较,每次候选区数减少一半,时间复杂度O(logn)

    顺序查找

    def linear_search(data_set, value):
        for i in range(range(data_set)):
            if data_set[i] == value:
                return i
        return

    三、二分查找

    不使用递归的方式:

    def binary_search(l,n):
        low = 0
        hight = len(l)
        while low <= hight:
            mid = (low + hight) // 2
            if l[mid][id] < n:
                print(l[mid])
                low = mid + 1
            elif l[mid][id] > n:
                print(l[mid])
                hight = mid - 1
            else:
                return mid

    使用递归的方式:

    def binary_search(l,aim,start= 0,end=None):
        if end == None:end = len(l) - 1
        if start <= end:
    
            # (end - start) // 2 + start    两种方法
            mid = (end + start) // 2  #12 18
            if l[mid] < aim:
                return func(l,aim,start = mid + 1,end = end) # [42,43,55,56,66,67,69,72,76,82,83,88]
            elif l[mid] > aim:
                return func(l,aim,start = start,end = mid - 1)
            elif l[mid] == aim:
                return mid
        else:
            return None

    要求列表是有序的,所以python中列表的查找,并不是采用的二分查找。

    四、练习

    LetCode网站题目:
    
    现有一个学员信息列表(按id增序排列),格式为:
    stu_info = [
        {id:1001, "name":"张三", "age":20},
        {id:1002, "name":"李四", "age":25},
        {id:1004, "name":"王五", "age":23},
        {id:1007, "name":"赵六", "age":33}
    ]
    修改二分查找代码,输入学生id,输出该学生在列表中的下标,并输出完整学生信息。
    def binary_search(l,n):
        low = 0
        hight = len(l)
        while low <= hight:
            mid = (low + hight) // 2
            if l[mid][id] < n:
                print(l[mid])
                low = mid + 1
            elif l[mid][id] > n:
                print(l[mid])
                hight = mid - 1
            else:
                return mid
    
    ret = binary_search(stu_info,1004)
    print(ret)
  • 相关阅读:
    K8S入门学习
    CentOs7安装docker(第二篇)
    使用NFS时的一些问题
    linux的一些基本命令
    centOS7搭建NFS服务器
    ELK日志系统+x-pack安全验证
    如何在网页中用echarts图表插件做出静态呈现效果
    3.29——工作日志
    导航选中,背景变色效果
    网站滚动n个像素后,头部固定
  • 原文地址:https://www.cnblogs.com/weihengblog/p/9427070.html
Copyright © 2011-2022 走看看