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

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

二、列表查找方式

  • 顺序查找 : 从列表的第一个元素开始遍历,知道找到为止。时间复杂度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 ireturn

三、二分查找

不使用递归的方式:

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

使用递归的方式:

def binary_search(l,aim,start= 0,end=None):if end == None:end = len(l) - 1if start <= end:# (end - start) // 2 + start    两种方法mid = (end + start) // 2  #12 18if 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 midelse: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 = 0hight = len(l)while low <= hight:mid = (low + hight) // 2if l[mid][id] < n:print(l[mid])low = mid + 1elif l[mid][id] > n:print(l[mid])hight = mid - 1else:return midret = binary_search(stu_info,1004)
print(ret)

转载于:https://www.cnblogs.com/weihengblog/p/9427070.html

Python查找算法之 -- 列表查找和二分查找相关推荐

  1. Python 关于下标的运用技巧(二分查找法,冒泡、选择、插入、归并、快速排序算法)

    二分查找法(折半查找法)的递归实现 二分查找法(折半查找法):用于预排序列表的查找问题, 再次强调,二分查找法要配合排序使用,只有排好序,才能使用二分查找法 而且,待查找列表如果有重复值,只能查找到其 ...

  2. 【数据结构与算法】插值查找算法、斐波那契查找算法(黄金分割法)的介绍和程序实现

    目录 1. 插值查找算法 1.1 插值查找算法的介绍 1.2 插值查找算法的程序实现 2. 斐波那契查找算法 2.1 斐波那契查找算法的介绍 2.2 斐波那契查找算法的程序实现 1. 插值查找算法 1 ...

  3. 查找算法【二叉查找树】 - 二叉查找树的查找

    查找算法[二叉查找树] - 二叉查找树的查找 因为二叉查找树的中序遍历有序性,所以查找与二分查找类似,每次都缩小查找范围,查找效率较高. [算法步骤] ① 若二叉查找树为空,查找失败,则返回空指针. ...

  4. 查找算法:斐波那契查找算法实现及分析

    斐波那契查找算法介绍 斐波那契查找法肯定与斐波那契相关嘛,斐波那契数列 又称黄金分割数列.所以我们先把黄金分割弄懂,后面代码才能看得懂!黄金分割点大家都知道吧.1:0.618或者1.618:1,我们的 ...

  5. Python数据结构与算法篇(五)-- 二分查找与二分答案

    1 二分法介绍 1.1 定义 二分查找又称折半查找.二分搜索.折半搜索等,是一种在静态查找表中查找特定元素的算法. 所谓静态查找表,即只能对表内的元素做查找和读取操作,不允许插入或删除元素. 使用二分 ...

  6. 算法回顾(三) 二分查找

    二分查找,顾名思义,它的原理是,将排序好的数列分成两部分,判断期待值在高位部分还是在低位部分,然后再将期待值所在的那个区间的数列重新按照这个规则划分成两部分,再比较,直到最后不能划分为止. 优点是比较 ...

  7. 二分算法php,使用PHP实现二分查找算法代码分享

    第一种方法: [二分查找要求]:1.必须采用顺序存储结构 2.必须按关键字大小有序排列. [优缺点]折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难.因 ...

  8. 二分查找算法详解(经典二分和左右边界查找)

    目录 二分查找算法 1. 二分查找算法框架 2. 经典二分查找算法 问题1. 为什么while循环中使用<=号而不是用<号,右边区间right为什么要对数组大小减一? 问题2. 为什么 l ...

  9. 程序员的算法课(4)-二分查找

    一个90%的程序员写不对的程序,一个面试高频出现的面试题,一个开发中用之甚广的算法,一个最能体现程序员素质的代码,它就是二分查找. 一.二分查找的定义 [百度百科]二分查找也称折半查找(Binary ...

最新文章

  1. Windows 命令集合
  2. matlab主成分分析散点图_matlab、R软件等做主成分分析结果不同?为什么?
  3. android官方夜间模式,Android夜间模式实践
  4. 资讯|WebRTC M96 更新
  5. 电商总结(七)缓存系统
  6. 布隆过滤器 redis_redis布隆过滤器
  7. j.u.c系列(08)---之并发工具类:CountDownLatch
  8. sqlserver编号
  9. JAVA NIO编程入门(一)
  10. 这个时代再也难出现贵子
  11. Invalid classes inferred from unique values of `y`. Expected: [0 1 2], got [1 2 3]
  12. Y件DOOK: VSC 安装 谷歌浏览器调试 固件插件 Debugger for Chorme
  13. Ubuntu 20.10 引导修复(boot repair)
  14. NETCONF配置CISCO XE(csr1000v)初体验
  15. 计算机桌面怎么情理,关于电脑桌面上的流氓图标要怎么清理???
  16. 2.9CSS table属性
  17. Kylin作用是什么?
  18. excel2016安装图文详解
  19. PHP获取到当前主域名
  20. Excel计算出生日期、年龄、性别等身份相关的函数公式

热门文章

  1. 利用moviepy库制作好用的MP4、mov、mav、avi等视频类型转换gif图片的工具
  2. docker pull php7,Docker pull php:7.1-fpm的php.ini配置修改
  3. Java笔记-Spring Boot使用外部Tomcat及解决Tomcat乱码
  4. 前端工作笔记-element ui弹窗嵌套并获取输入
  5. C++设计模式-迭代器模式
  6. Qt文档阅读笔记-QNetworkAccessManager官方解析与实例
  7. Qt文档阅读笔记-Text QML Type官方解析及实例
  8. linux工作笔记-linux之间文件传输图形界面工具gftp
  9. Qt工作笔记-QTableWidget设置委托(使用QStyledItemDelegate画3只小猪)
  10. Database工作笔记-对层次库的理解