一、查找

在一组数据中找某一个特定项的算法过程
通常用来判断某个特定项是否在一组数据中,最终返回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】数据结构与算法之二分查找相关推荐

  1. python数据结构与算法:二分查找

    二分查找:python 实现 def binary_seaech(alist,item):"""二分查找 递归实现"""n = len(al ...

  2. 数据结构与算法:二分查找

    二分查找是搜索算法中的一种,用来搜索有序数组 二分查找: 是一种简单算法,其输入是一个有序的元素列表(必须有序的原因稍后解释).如果要 查找的元素包含在列表中,二分查找返回其位置:否则返回null. ...

  3. 【数据结构与算法】二分查找

    一.什么是二分查找? 二分查找针对的是一个有序的数据集合,每次通过跟区间中间的元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间缩小为0. 二.时间复杂度分析? 1.时间复杂度 ...

  4. vue 怎么样不重复往数组里插入数据_前端数据结构与算法(1) -二分查找vs二叉树...

    今天给大家开始介绍前端方面的数据结构,刚把vue源码过完就开始数据结构,可见它的地位有多重要.有人说我一前端又不是后端学这个数据结构干嘛,好吧,只能说你还没有这个意识,一是面试很多大厂就会考察,我面试 ...

  5. 数据结构与算法《二分查找》

    数据结构与算法(java)<二分查找> 基本二分查找public class BinarySearch {/*** 1.定义一个有序数组,* 2.定义两个变量i,j* 3.定义一个待查找的 ...

  6. 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 ...

  7. 常考数据结构与算法-NC105 二分查找-II

    描述 请实现有重复数字的升序数组的二分查找 给定一个 元素有序的(升序)长度为n的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存 ...

  8. 数据结构与算法--6.二分查找

    文章目录 一. 二分查找 二. 代码实现一:使用递归 三. 代码实现二:非递归 一. 二分查找 二. 代码实现一:使用递归 def binary_search(alist, item):"& ...

  9. 数据结构与算法之二分查找法

    public static void main(String[] args) {         //目标数组         int[] arr = new int[] {1,2,3,4,5,6,7 ...

最新文章

  1. 指针02 - 零基础入门学习C语言42
  2. 160个Crackme040
  3. 简单易懂的 pwnable.kr 第六题[random]Writeupt
  4. IT人的学习方法论-4 一些重要的能力
  5. oracle raise_application_error,RAISE_ APPLICATION_ ERROR--之异常处理
  6. 作为一名程序员,我站在人生的十字路口
  7. Android Room 之存储 Objects 中的 List
  8. Windows核心编程_Miniblin(5) 前后端交互数据
  9. python问号堂--第二篇
  10. 618当天,90%的程序员在干什么?
  11. Pygame实战:这种“欢乐打地鼠”小游戏让几亿人“上瘾“
  12. ROS机器人操作系统——订阅者Subscriber的编程实现(五)
  13. PyTorch中通过torch.save保存模型和torch.load加载模型介绍
  14. 乐视pro3精英版乐视X722线刷兼救砖_纯净刷机包_教程
  15. 基于I2C协议读取AD值(arm单片机,转换标志位RDY-可中断使用)
  16. 淘宝产品ID在哪儿查询?
  17. 招行股东会通过收购永隆银行议案
  18. 【开源项目】X-TRACK源码分析
  19. 前端学习笔记(十五)
  20. 关于招投标项目经理需要知道什么

热门文章

  1. 让运维人崩溃的10大瞬间
  2. webbrowser 百度列表点击_前嗅ForeSpider采集教程:关键词的「检索列表」采集「检索结果」...
  3. 数值分析第五版电子版_二年级上册数学重点必考题20道,看看不吃亏!【有电子版】...
  4. 成功解决RuntimeError: Decompression ‘SNAPPY‘ not available.  Options: [‘GZIP‘, ‘UNCOMPRESSED‘]
  5. AI开发者大会:2020年7月3日09:50--10:10唐杰《人工智能的下一个十年》
  6. 成功解决(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
  7. DL之DeepLabv2:DeepLab v2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  8. TF之LiR:利用TF自定义一个线性分类器LiR对乳腺癌肿瘤数据集进行二分类预测(良/恶性)
  9. 一文读懂QEMU虚拟机
  10. OpenGL学习笔记以及其它学习思考