二分查找递归与非递归的时间比较_我们说一说Python的查找算法!
相信大家在面试开发岗和算法岗时,评委最喜欢问的就是:您能给我说一下查找和排序算法有哪些?今天咱们就说一说Python中最常用的查找算法,下期我们再推出排序算法。
首先要明白查找是查什么?我们希望能给定一个值,在待查找的范围内确认是否存在某一数据与指定值相同,返回该数据的索引。最常用的查找算法主要包括顺序查找和二分查找,顺序查找就是从待查找的数据中从第一元素开始,逐个将每个元素值与指定查找的值进行对比;如果比较到两者相同,则查找成功;如果到最后仍未找到,则查找失败。下面是顺序查找代码:
顺序查找_page_1
顺序查找_page_2
我们看到,顺序查找的优势就是适合数据量小,不要求数据本身有序,但当数据量较大时,查找效率低。而二分查找是指在有序数据集合中查找数据,默认从小到大排序,找出有序数据中的中间元素,由中间元素将源数据分为左右两部分。比较中间值与指定查找值的大小:1)如果相等,则查找成功;2)如果指定值比中间值小,则左侧继续重复查找;3)如果指定值比中间值大,则右侧继续重复查找。4)如此递归下去,直到成功找到或查找完整个数据集合为止。二分查找我们可以用循环的方式,也可以用递归的方式实现,首先是循环的方式:
二分查找(循环)_page_1
二分查找(循环)_page_2
接下来是递归模式:
二分查找(递归)_page_1
二分查找(递归)_page_2
我们看到二分查找的主要优势是每次查找其搜索范围减半,但要求数据本身有序。受制于水平的有限,这里基于Python这门语言将顺序查找和二分查找进行了简单的对比,各有优势。需要交流和切磋的读者朋友,请在评论区积极留言,欢迎关注头条号:杜哥说python。
二分查找递归与非递归的时间比较_我们说一说Python的查找算法!相关推荐
- JAVA常用算法一:二分查找【递归 or 非递归】
文章目录 一.Java实现二分查找[递归] 二.Java实现二分查找[非递归] 三.测试 一.Java实现二分查找[递归] //递归使用二分查找public static int binarySear ...
- 算法006:二分查找 递归、非递归
题目: 已知一个有序数组arr 给定需要搜索的元素,返回索引,若无则返回-1思路: 递归和非递归 1.代码如下 BinSearch .java: package com.yuhl.right;/*** ...
- (C语言)BinarySearch二分搜索/折半查找 --- 递归、非递归
1 /*2 * FILE: BinarySearch.C3 * DATE: 201803064 * ==============5 * DESCRIPTION: 折半查找_递归.非递归实现6 * 二分 ...
- 递归折半查找法 c语言程序,折半查找法的递归和非递归形式
/* 1.折半查找的查找过程是:先确定待查记录所在区间,然后逐步缩小范围至到找到或者找不到该记录为止. 2.折半查找的性能分析可以由判定树得出,折半查找在查找成功时给定值进行比较的关键字个数至多为⌊l ...
- C#实现(递归和非递归)快速排序和简单排序
C#实现(递归和非递归)快速排序和简单排序 本人因为最近工作用到了一些排序算法,就把几个简单的排序算法,想冒泡排序,选择排序,插入排序,奇偶排序和快速排序等整理了出来,代码用C#代码实现,并且通过了测 ...
- 二叉树创建及遍历算法(递归及非递归)(转)
//二叉树处理头文件 //包括二叉树的结构定义,二叉树的创建,遍历算法(递归及非递归), /* 作者:成晓旭 时间:2001年10月7日(18:49:38-20:00:00) 内容:完成二叉树创建,二 ...
- 二叉树的先中后序递归和非递归遍历(数据结构作业)
一.设计思想 我创建二叉树是用的先序创建,其中用'#'代表空节点. 1.递归先序遍历 (1)如果当前节点为空节点(用'#'代表空节点),结束当前函数 (2)打印当前节点 (2)递归当前节点的左子树 ( ...
- 树的递归与非递归遍历算法
树的递归与非递归遍历算法 树的递归与非递归遍历算法 树的遍历 实例 树遍历的口诀 树的递归遍历代码 树的先序遍历 树的中序遍历 树的后序遍历 递归遍历思想 树的非递归遍历 树的先序非递归遍历 先序遍历 ...
- 全排列(含递归和非递归的解法)
全排列在近几年各大网络公司的笔试中出现的比较频繁 首先来看看题目是如何要求的(百度迅雷校招笔试题). 用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列, ...
最新文章
- 关于std::string 在 并发场景下 __grow_by_and_replace free was not allocated 的异常问题
- mongodb导入hive
- windows7基本操作学习笔记
- Java 10.switch语句
- 漫谈分布式事务的那些解决方案
- 中震弹性计算_众值烈度、中震烈度、大震烈度及三水准二阶段
- linux —— shell 编程(文本处理)
- MWPhotoBrowser 属性详解 和代理解释
- ftp 上传文件夹_建站上传下载FTP工具
- 关于安装 rst2pdf 时遇到的 setuptools过老的问题
- linux 图形化修改时区,Centos 7图形化与安装中文支持与修改时区方法
- HBase编程api介绍(转)
- 用友账套和报表服务器显示不同,用友T3ufo报表提示“服务器出现意外情况”
- TongWeb基本使用
- 机器学习(7)——安然数据集分析
- C++超市商品管理系统设计最新版
- 如何将计算机基础拷到u盘上,怎么把电脑上的CAD拷贝到u盘里
- CentOS7 DNS配置一条龙全套服务
- 代谢组学数据分析及网络药理学研究技术与实践
- 聊聊引擎底层如何实现Bloom渲染算法
热门文章
- 模拟耗时操作_在集成测试中模拟耗时的动作
- macosx jdk_MacOSX环境上的多个Java JDK
- jax-rs/jersey_在Oracle Cloud上的Prime-UI,JAX-RS和Jersey和Gson
- 什么是javax.ws.rs.core.context? [第5部分]
- 使用Gradle的maven-publish插件发布快照
- 使用Spring Boot隔离集成测试和模拟依赖项
- soa示例_SOA示例应用程序
- jvm线程分析命令_JVM:如何分析线程转储
- JBoss BPM Suite 6.0.3版本的5个实用技巧
- JavaFX教程–基础