相信大家在面试开发岗和算法岗时,评委最喜欢问的就是:您能给我说一下查找和排序算法有哪些?今天咱们就说一说Python中最常用的查找算法,下期我们再推出排序算法。

首先要明白查找是查什么?我们希望能给定一个值,在待查找的范围内确认是否存在某一数据与指定值相同,返回该数据的索引。最常用的查找算法主要包括顺序查找和二分查找,顺序查找就是从待查找的数据中从第一元素开始,逐个将每个元素值与指定查找的值进行对比;如果比较到两者相同,则查找成功;如果到最后仍未找到,则查找失败。下面是顺序查找代码:

顺序查找_page_1

顺序查找_page_2

我们看到,顺序查找的优势就是适合数据量小,不要求数据本身有序,但当数据量较大时,查找效率低。而二分查找是指在有序数据集合中查找数据,默认从小到大排序,找出有序数据中的中间元素,由中间元素将源数据分为左右两部分。比较中间值与指定查找值的大小:1)如果相等,则查找成功;2)如果指定值比中间值小,则左侧继续重复查找;3)如果指定值比中间值大,则右侧继续重复查找。4)如此递归下去,直到成功找到或查找完整个数据集合为止。二分查找我们可以用循环的方式,也可以用递归的方式实现,首先是循环的方式:

二分查找(循环)_page_1

二分查找(循环)_page_2

接下来是递归模式:

二分查找(递归)_page_1

二分查找(递归)_page_2

我们看到二分查找的主要优势是每次查找其搜索范围减半,但要求数据本身有序。受制于水平的有限,这里基于Python这门语言将顺序查找和二分查找进行了简单的对比,各有优势。需要交流和切磋的读者朋友,请在评论区积极留言,欢迎关注头条号:杜哥说python。

二分查找递归与非递归的时间比较_我们说一说Python的查找算法!相关推荐

  1. JAVA常用算法一:二分查找【递归 or 非递归】

    文章目录 一.Java实现二分查找[递归] 二.Java实现二分查找[非递归] 三.测试 一.Java实现二分查找[递归] //递归使用二分查找public static int binarySear ...

  2. 算法006:二分查找 递归、非递归

    题目: 已知一个有序数组arr 给定需要搜索的元素,返回索引,若无则返回-1思路: 递归和非递归 1.代码如下 BinSearch .java: package com.yuhl.right;/*** ...

  3. (C语言)BinarySearch二分搜索/折半查找 --- 递归、非递归

    1 /*2 * FILE: BinarySearch.C3 * DATE: 201803064 * ==============5 * DESCRIPTION: 折半查找_递归.非递归实现6 * 二分 ...

  4. 递归折半查找法 c语言程序,折半查找法的递归和非递归形式

    /* 1.折半查找的查找过程是:先确定待查记录所在区间,然后逐步缩小范围至到找到或者找不到该记录为止. 2.折半查找的性能分析可以由判定树得出,折半查找在查找成功时给定值进行比较的关键字个数至多为⌊l ...

  5. C#实现(递归和非递归)快速排序和简单排序

    C#实现(递归和非递归)快速排序和简单排序 本人因为最近工作用到了一些排序算法,就把几个简单的排序算法,想冒泡排序,选择排序,插入排序,奇偶排序和快速排序等整理了出来,代码用C#代码实现,并且通过了测 ...

  6. 二叉树创建及遍历算法(递归及非递归)(转)

    //二叉树处理头文件 //包括二叉树的结构定义,二叉树的创建,遍历算法(递归及非递归), /* 作者:成晓旭 时间:2001年10月7日(18:49:38-20:00:00) 内容:完成二叉树创建,二 ...

  7. 二叉树的先中后序递归和非递归遍历(数据结构作业)

    一.设计思想 我创建二叉树是用的先序创建,其中用'#'代表空节点. 1.递归先序遍历 (1)如果当前节点为空节点(用'#'代表空节点),结束当前函数 (2)打印当前节点 (2)递归当前节点的左子树 ( ...

  8. 树的递归与非递归遍历算法

    树的递归与非递归遍历算法 树的递归与非递归遍历算法 树的遍历 实例 树遍历的口诀 树的递归遍历代码 树的先序遍历 树的中序遍历 树的后序遍历 递归遍历思想 树的非递归遍历 树的先序非递归遍历 先序遍历 ...

  9. 全排列(含递归和非递归的解法)

    全排列在近几年各大网络公司的笔试中出现的比较频繁 首先来看看题目是如何要求的(百度迅雷校招笔试题). 用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列, ...

最新文章

  1. 关于std::string 在 并发场景下 __grow_by_and_replace free was not allocated 的异常问题
  2. mongodb导入hive
  3. windows7基本操作学习笔记
  4. Java 10.switch语句
  5. 漫谈分布式事务的那些解决方案
  6. 中震弹性计算_众值烈度、中震烈度、大震烈度及三水准二阶段
  7. linux —— shell 编程(文本处理)
  8. MWPhotoBrowser 属性详解 和代理解释
  9. ftp 上传文件夹_建站上传下载FTP工具
  10. 关于安装 rst2pdf 时遇到的 setuptools过老的问题
  11. linux 图形化修改时区,Centos 7图形化与安装中文支持与修改时区方法
  12. HBase编程api介绍(转)
  13. 用友账套和报表服务器显示不同,用友T3ufo报表提示“服务器出现意外情况”
  14. TongWeb基本使用
  15. 机器学习(7)——安然数据集分析
  16. C++超市商品管理系统设计最新版
  17. 如何将计算机基础拷到u盘上,怎么把电脑上的CAD拷贝到u盘里
  18. CentOS7 DNS配置一条龙全套服务
  19. 代谢组学数据分析及网络药理学研究技术与实践
  20. 聊聊引擎底层如何实现Bloom渲染算法

热门文章

  1. 模拟耗时操作_在集成测试中模拟耗时的动作
  2. macosx jdk_MacOSX环境上的多个Java JDK
  3. jax-rs/jersey_在Oracle Cloud上的Prime-UI,JAX-RS和Jersey和Gson
  4. 什么是javax.ws.rs.core.context? [第5部分]
  5. 使用Gradle的maven-publish插件发布快照
  6. 使用Spring Boot隔离集成测试和模拟依赖项
  7. soa示例_SOA示例应用程序
  8. jvm线程分析命令_JVM:如何分析线程转储
  9. JBoss BPM Suite 6.0.3版本的5个实用技巧
  10. JavaFX教程–基础