【python】数据结构与算法之二分查找
一、查找
在一组数据中找某一个特定项的算法过程
通常用来判断某个特定项是否在一组数据中,最终返回True或False
常用的查找算法:顺序查找、二分查找、树表查找、哈希查找等
二、二分查找
二分查找又称为折半查找,要求待查表为有序表
将表中间位置记录的关键字与查找关键字比较,如果相等则比较成功;否则利用中间位置的记录缩小区间,继续查找缩小后的区间。
重复上面的步骤直到查找成功,或者子表不存在,则查找失败
三、画图演示
例如查找6是否在数组中
1、找到中间值mid=len(nums)//2==5
2、索引为5时,值为9;比较nums[5]>6,可知目标值在nums[5]的左边
3、将右游标移动,移动到mid-1的位置
4、找到中间值mid=len(nums)//2=2
5、索引为2时,值为4;比较nums[2]<6,可知目标值在nums[2]的右边
6、移动左游标,移动到mid+1的位置
7、找到中间值mid=len(nums)//2=1
8、索引为1时,值为8;比较nums[1]>6,可知目标值在nums[2]的左边
9、将右游标移动,移动到mid-1的位置
10、此时左游标和右游标重合
11、找到中间值mid=len(nums)//2=0
12、索引为0时,值为6;比较nums[1]=6,找到目标值,否则数组中没有目标值
四、代码块
采用递归方法
时间复杂度为O(logn)
def binary_search(nums,target,left,right):'''二分查找递归版:param nums: 待查找的数组,要求时升序的:param target:要找的的数字:param left:区间的左边索引:param right:区间的右边索引:return:target在nums中就返回True,否则返回False'''#递归的结束条件,left>rightif left>right:return False#找中间值mid=(left+right)//2 #中间值的索引#判断中间值是否等于目标值if nums[mid]==target:return True#如果中间值小于目标值,说明目标值只能在中间值的右边区间if nums[mid]<target:left=mid+1return binary_search(nums,target,mid+1,right)# 如果中间值大于目标值,说明目标值只能在中间值的左边区间return binary_search(nums,target,left,mid-1)test=[1,3,4,6,8,9,15,19,44,44]
print(binary_search(test,15,0,len(test)-1))
print(binary_search(test,14,0,len(test)-1))
【python】数据结构与算法之二分查找相关推荐
- python数据结构与算法:二分查找
二分查找:python 实现 def binary_seaech(alist,item):"""二分查找 递归实现"""n = len(al ...
- 数据结构与算法:二分查找
二分查找是搜索算法中的一种,用来搜索有序数组 二分查找: 是一种简单算法,其输入是一个有序的元素列表(必须有序的原因稍后解释).如果要 查找的元素包含在列表中,二分查找返回其位置:否则返回null. ...
- 【数据结构与算法】二分查找
一.什么是二分查找? 二分查找针对的是一个有序的数据集合,每次通过跟区间中间的元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间缩小为0. 二.时间复杂度分析? 1.时间复杂度 ...
- vue 怎么样不重复往数组里插入数据_前端数据结构与算法(1) -二分查找vs二叉树...
今天给大家开始介绍前端方面的数据结构,刚把vue源码过完就开始数据结构,可见它的地位有多重要.有人说我一前端又不是后端学这个数据结构干嘛,好吧,只能说你还没有这个意识,一是面试很多大厂就会考察,我面试 ...
- 数据结构与算法《二分查找》
数据结构与算法(java)<二分查找> 基本二分查找public class BinarySearch {/*** 1.定义一个有序数组,* 2.定义两个变量i,j* 3.定义一个待查找的 ...
- Python数据结构——对有序表二分查找
list= [1, 5, 6, 9, 10, 51, 62, 65, 70] 查找5时: [1, 5, 6, 9, 10, 51, 62, 65, 70] low=0 high=9 ...
- 常考数据结构与算法-NC105 二分查找-II
描述 请实现有重复数字的升序数组的二分查找 给定一个 元素有序的(升序)长度为n的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存 ...
- 数据结构与算法--6.二分查找
文章目录 一. 二分查找 二. 代码实现一:使用递归 三. 代码实现二:非递归 一. 二分查找 二. 代码实现一:使用递归 def binary_search(alist, item):"& ...
- 数据结构与算法之二分查找法
public static void main(String[] args) { //目标数组 int[] arr = new int[] {1,2,3,4,5,6,7 ...
最新文章
- 指针02 - 零基础入门学习C语言42
- 160个Crackme040
- 简单易懂的 pwnable.kr 第六题[random]Writeupt
- IT人的学习方法论-4 一些重要的能力
- oracle raise_application_error,RAISE_ APPLICATION_ ERROR--之异常处理
- 作为一名程序员,我站在人生的十字路口
- Android Room 之存储 Objects 中的 List
- Windows核心编程_Miniblin(5) 前后端交互数据
- python问号堂--第二篇
- 618当天,90%的程序员在干什么?
- Pygame实战:这种“欢乐打地鼠”小游戏让几亿人“上瘾“
- ROS机器人操作系统——订阅者Subscriber的编程实现(五)
- PyTorch中通过torch.save保存模型和torch.load加载模型介绍
- 乐视pro3精英版乐视X722线刷兼救砖_纯净刷机包_教程
- 基于I2C协议读取AD值(arm单片机,转换标志位RDY-可中断使用)
- 淘宝产品ID在哪儿查询?
- 招行股东会通过收购永隆银行议案
- 【开源项目】X-TRACK源码分析
- 前端学习笔记(十五)
- 关于招投标项目经理需要知道什么
热门文章
- 让运维人崩溃的10大瞬间
- webbrowser 百度列表点击_前嗅ForeSpider采集教程:关键词的「检索列表」采集「检索结果」...
- 数值分析第五版电子版_二年级上册数学重点必考题20道,看看不吃亏!【有电子版】...
- 成功解决RuntimeError: Decompression ‘SNAPPY‘ not available. Options: [‘GZIP‘, ‘UNCOMPRESSED‘]
- AI开发者大会:2020年7月3日09:50--10:10唐杰《人工智能的下一个十年》
- 成功解决(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
- DL之DeepLabv2:DeepLab v2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- TF之LiR:利用TF自定义一个线性分类器LiR对乳腺癌肿瘤数据集进行二分类预测(良/恶性)
- 一文读懂QEMU虚拟机
- OpenGL学习笔记以及其它学习思考