快速理解二分法查找

1、什么是二分法查找?

简单粗暴一点理解二分法

(1)将数据有序排列:先将一个数据集进行有序排列(可根据某种数值的大小降序或升序<当然排序的规则可根据业务规则自定义>,前提是需要查找的数据具备该规则同样的属性);

 

(2)数据分半:就是将排序好的数据集切分成大致相等的两份数据;

 

(3)查找数据:把排序好的数据拆分为个数大致相等的两半,因为有排序,查找的时候先和其中一半数据种的最大或者最小的数进行比较来断定要查找的数据是否会包含被分割后的一半数据种,然后在满足判定条件的数据集中一次获取数据进行比对直到找到数据或者比较完所有数据返回没有该数据,

 

(4)文字太苍白:用例子进行表述一下便于我们快速理解;

题目是从[5,7,2,8,4,9,1,3,6]  快速查找到X在数据种的位置:

 

我们先要把 [2,-3,0,5,-1,,6]   进行排序[-3,-2,0,2,5,6]    然后进行拆分data1 [-3,-2,0]      data2[2,5,8,6]

然后用查找X,是在数据中的位置,假如先从data1检索则如下:

 

如果x>data1[last]

则表示X不在data1 中(因为我们已经进行了排序的),则比较对象换成data2,那么我们把data2看成一个新的数据集继续进行拆分,把data2拆分成data2_1 和data2_2继续按照之前的规则进行比较,按照此规律直到找到X相同的值或者比较完data2所有的数据则返回;

 

如果x<data1[last]

则表示X绝对不会存在data2中(因为我们已经进行了排序的),可能存在data1中,那么又我们把data1看成一个新的数据集继续进行拆分,把拆data1分成data1_1 和data1_2,按照此规律直到找到X相同的值或者比较完data2所有的数据则返回;

 

如果x=data1[last]

那么返回data[last]的位置;

 

最后一张图来说明

094948_faDZ_3370829.png

 

2、特点

查找的时候可以减少比对数据的数量,加快查找速度,但只适用于排序数据,对数据排序本身又会消耗时间性能;

转载于:https://my.oschina.net/u/3370829/blog/1301725

chuntancheng4952
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一文弄懂二分查找原理
Runnymmede的博客
02-22 360
二分查找(Binary Search)算法是一种针对有序且不含重复数据集合的查找算法,时间复杂度为 $O(logn)$ ,二分查找虽然性能比较优秀,但应用场景也比较有限。
计算机算法分析 二分查找 分治算法
09-27
分治法是将一个规模为n的问题分解为k个规模较小的子问题。注意:这里的子问题一定是相互独立且与原问题相同。用递归的方法解这些子问题。然后将各子问题的解合并到原问题的解。 二分查找算法是运用分治的典型例子:给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。所以容易设计出二分搜索算法:在 a[0] <= a[1] <= ... <= a[n-1] 中搜索 x, 找到x时返回其在数组中的位置,否则返回-1;
查找算法】二分查找
最新发布
suiyishiguang的博客
03-04 1128
查找算法】二分查找
二分查找详解
m0_65334415的博客
06-08 5813
二分查找是一项效率很高的排序方法,但是却不意味着,任何情况下都可以使用二分查找
二分查找--图文详解
iLoyo_的博客
07-01 2万+
二分查找也称折半查找,是在一组有序(升序/降序)的数据中查找一个元素,它是一种效率较高的查找方法。
简述二分查找算法原理
菜鸟也学大数据的博客
07-20 1068
一.二分查找概述 举例:当需要查找一个升序数组中是否包含某个数时,可以使用二分查找算法(要求数组必须有序),就是将数组的中间值与该数比较,若该数大于中间值,则表明在该数组中间值的右侧,反之亦然,这个时候,将改变起始值或末尾值在将该数,与重新选定的区域中间值判断,依次类推,直到结束 二.代码示例 /** * @ Author: Zhangyu * @ Date: 2020/7/20 * @ Description:二分查找前提条件,数组要有序 */ public class Test_EF {
二分法查找指定元素
12-22
如果小于,就查找原列表的下半部分[0,(len(list)-1)//2],查找次数为log(2,n),二分法只适用于有序列表!!! #import time import random #import math def two(n,list): mi=0 mx=len(list)-1 i=1 while miguss: ...
java算法——二分法查找
07-15
二分法查找 *进行二分法查找的前提是数组已有序 *查找范围的上下界
C#二分法查找连续数字
10-10
C#二分法快速查找查找连续数字,C#二分法快速查找查找连续数字,C#二分法快速查找查找连续数字,C#二分法快速查找查找连续数字,
浅谈二分法查找和原始算法查找的效率对比
08-18
主要介绍了浅谈二分法查找和原始算法查找的效率对比,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
php 数组二分法查找函数代码
10-29
search函数 其中$array为数组,$k为要找的值,$low为查找范围的最小键值,$high为查找范围的最大键值
查找算法——二分查找(原理+源码)
manduner的博客
03-09 5782
1,原理 二分查找又称折半查找,只适用于有序数组。二分查找原理很简单,针对有序数组的查找效率也很高。具体原理为,每次拿目标数值(以下用value表示)与数组中间位置的数据(以下用arry[mid]表示,mid表示数组中间位置索引值)进行比较,如果value大于arry[mid],继续将value与大于arry[mid]部分的中间位置的值进行比较;如果value小于arry[mid],继续将val...
超详解“二分法查找”,一看就会!
m0_68993867的博客
08-01 1万+
二分法往简单明了就三个步骤:1. 对半折 2. 查找中间值(mid) 3.缩小区间(看与mid的关系再决定,往左+1或者往 右-1)
数据结构算法 之 二分查找法(LC)
Luckyzhoufangbing的博客
11-30 1960
(一)定义 二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。 二分法查找的思路如下: (1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。 (2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。 (3)如果某一步数组为空,则表示找不到目标元素。 二分法查找的时间复杂度O(logn) (二)适用条件 排好序的数组 (三)注意的几点 1. 双指针中间数值 index va
二分查找算法详解
huihui_8的博客
12-29 1660
1.介绍 二分查找。也成折半查找(Binary Search),它是一种效率较高的查找方法,实现原理简单,但细节相对 复杂的算法。关于二分查找,有个经典的理解,思路很简单,细节是魔鬼 。 二分查找的常用场景一般包括:寻找一个数、寻找左侧边界、寻找右侧边界。而细节,主要体现在, while循环中用 < 还是 <= , mid 是否应该加1等。 下面从常用场景,结合 leetcode 题目,简单介绍下。 2. 寻找一个数 这是最简单的二分查找...
数据结构与算法 | 二分查找
平头哥的技术博文
08-12 2807
原理 二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,有点类似分治的思想。二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。 为了方便理解,我们以数组1, 2, 4, 5, 6, 7, 9, 12, 15, 19, 23, 26, 29, 34, 39,...
二分法查找原理及方法
xiaoleiza的博客
03-14 2984
二分法查找原理及方法 二分法查找的思路如下: 1:首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。 2:如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤1的操作。 3:如果某一步数组为空,则表示找不到目标元素。 非递归方法 function binarySearch(arr,item){ var len = arr.length, start = 0, end = len-1;
查找算法:二分查找
热门推荐
weixin_47406709的博客
07-10 5万+
二分查找
二分查找法的实现及原理
ZS74520的博客
01-21 1321
二分搜索法 原理:折半查找,直到查找到的元素与目标元素相等,查找终止 二分搜索法的实现 剖析: 注: 1.基于排序的代码才能使用该方法 2.查找的终止条件:——> 中间的那个元素恰巧 等于 要查找的元素 假定现有一个数组arr = [20,21,22,23,24,25,26,27,28,29]; 使用二分搜索法查找该数组中的某一个元素 实现原理如下: (起始元素的下标 + 终止元素的下标)/ 2 --> 中间元素的下标 判断位于该中间的元素是否小于要查找的元素,如果小于,则 起始元素的下
c语言二分法查找特点
12-08
C语言二分法查找的特点如下: ```c int binarySearch(int arr[], int l, int r, int x) { while (l ) { int m = l + (r - l) / 2; if (arr[m] == x) return m; if (arr[m] ) l = m + 1; else r = m - 1; } ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 快速理解二分法查找 901
  • 快速了解Mysql几种存储引擎(MyISAM、INNODB、MEMORY)特性 361
  • 快速了解行锁、表锁、排他锁、共享锁 245
  • 了解spring事务七种传播方式、事务的4种隔离级别、脏读、重复读、幻读; 192
  • 快速理解索引原理、分类、特点 178

最新文章

  • 快速理解索引原理、分类、特点
  • 快速理解平衡二叉树、B-tree、B+tree、B*tree
  • 快速理解事务ACID特性
2017年11篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源宝宝五行起名字大全起名故事男孩有哪些英文名字怎么起重生空间军长军医媳妇剑神重生水龙头品牌排名穿越六十年代之末世女王卖酒卖茶叶的要怎么起名女孩子带曦的起名关于蔬菜公司的起名给男孩起名字大全中国与立陶宛断交好小说推荐周易起名网免费测名卜易居魅医倾城女孩姓史起啥名字好生鲜超市起名字吗北京起名字的地方姓刘怎么起个好名字镜像软件守护甜心2郑姓起名子饺子馆咋起名杜受田武状元苏乞儿粤语都市逍遥神迅雷精简网上收费起名字靠谱吗二个字的商标起名女孩子起名带有杰字淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化