算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。主要思想是:(设查找的数组区间为array[low, high])
(1)确定该区间的中间位置K
(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]b.array[k]<T 类似上面查找区间为array[k+1,……,high]。每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间缩小一半,递归找,即可。时间复杂度:O(log2n)。
比如说我有排序好的数组$arr = [1,5,7,8,10,34,35,70,90],我想找里面的$key70
判断取所有值的长度,对半/2这里有9个数字/2这里是4.5,当然数组里也没有4.5的下标,我们可以强制转为intval这里得到的是4为基数
我们拿$arr[4]也就是这里的10再和$key70进行对比,发现10是比70小的,所以我们再把下标刚刚的4再加1再查找,这样的话,又缩小了一半的查询,但如果你想找的$key小于10,只要把4减1可以查找
PHP写法
/**
      * 二分查找
      * @param Array $arr 待查找的数组
      * @param Int $key 要查找的关键字
      * @return Int
      */
    function bin_search(Array $arr,$key)
    {
        $high = count($arr);
        if($high <= 0)
            return 0;
        $low = 0;
        while($low <= $high)
        {     
            //当前查找区间arr[low..high]非空
              $mid=intval(($low + $high) / 2);
            if($arr[$mid] == $key) 
                return $mid; //查找成功返回
            if($arr[$mid] > $key)
                $high = $mid - 1; //继续在arr[low..mid-1]中查找
            else
                $low = $mid + 1; //继续在arr[mid+1..high]中查找
        }
        return 0; //当low>high时表示查找区间为空,查找失败
    }
    $arr = array(1,2,4,6,10,40,50,80,100,110);
    echo bin_search($arr,80);

PHP二分法查找,MYSQL索引即为用了此查找相关推荐

  1. MySQL索引面试题分析(索引分析,典型题目案例)

    [建表语句] create table test03(id int primary key not null auto_increment,c1 char(10),c2 char(10),c3 cha ...

  2. MySQL索引知识点学习

    什么是索引? MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构.通俗的说,索引就相当于一本书的目录,能加快数据库的查询速度. 一般来说索引本身也很大,不可能全部存储在内存中,因 ...

  3. B+Tree索引为什么可以支持千万级别数据量的查找——讲讲mysql索引的底层数据结构

    MySQL索引底层数据结构 索引是存储引擎快速找到记录的一种数据结构 一. 有索引与没索引的差距 先来看一张图: 左边是没有索引的情况,右边是作为col2字段 二叉树索引的情况. 假如执行查找(假设表 ...

  4. java怎么判断mysql中是否存在我们查找的索引_10张图告诉你,MySQL 是如何查找数据的?...

    在我们日常生活中经常会涉及到查找某个东西的场景,就比如说在一个学校里吧,我们想找出个子"最高的10个"同学,或者想查找姓名是"张三"的同学,又或者是查找学号是& ...

  5. MYSQL 索引相关

    为什么需要索引(Why is it needed)? 当数据保存在磁盘类存储介质上时,它是作为数据块存放.这些数据块是被当作一个整体来访问的,这样可以保证操作的原子性(原子性是指一个完整的事务程序,要 ...

  6. 面试官:聊一下你对MySQL索引实现原理?

    在数据库中,如果索引太多,应用程序的性能可能会受到影响,如果索引太少,又会对查询性能产生影响.所以,我们要追求两者的一个平衡点,足够多的索引带来查询性能提高,又不因为索引过多导致修改数据等操作时负载过 ...

  7. 超详细图解!【MySQL进阶篇】MySQL索引原理

    索引类型 索引可以提升查询速度,会影响where查询,以及order by排序.MySQL索引类型如下: 从索引存储结构划分:B Tree索引.Hash索引.FULLTEXT全文索引.R Tree索引 ...

  8. MySQL索引优化讲解

    前提 本文讲MySQL InnoDB存储引擎B树索引的sql优化,前提知识是对MySQL的B树索引的检索规则等方面有一定的理解,以及对EXPLAIN关键字查询计划的字段含义有一定的理解. 建表语句 C ...

  9. mysql索引实现原理_Mysql索引原理

    1.二分查找法 二分法,也叫二分查找法,是一种高效的查找算法. 如下一个有序数列,如果我们需要从中找到1这个元素,这个过程需要查找几次? [1,2,3,4,5,6,7,8,9,10] 对于这个数列查找 ...

最新文章

  1. 安装mysql_python的适合遇到mysql_config not found解决方案(mac)
  2. linux5.4支持中文及中文输入法
  3. java excel md5,excel表格数据md5加密-excel 怎么把文本转化成md5
  4. 远程管理客户端--SCCM
  5. 【Sqoop学习之一】Sqoop简介
  6. php判断表单提交是否为空,JS判断提交表单不能为空代码 多种方案
  7. JRuby--Java和Ruby的强强联合 Centos7.X
  8. 元旦节前python网络编程趣味小游戏
  9. 改进YOLOv5!GSConv+Slim Neck进一步提升YOLOv5性能!
  10. 【数字设计与计算机体系结构】2021-09-26-数字设计与计算机体系结构课程(四)
  11. json和jsonb类型——PostgreSQL
  12. maskrcnn selected_polygons.append(self.polygons[i]) IndexError: list index out of range
  13. 有的放矢-电气工程师的工作重心
  14. Java提取身份证照片数据,so easy
  15. excel表格拆分为多个工作表的操作方法
  16. low rank读书笔记
  17. 学会Python就能做游戏脚本开发?别天真了!
  18. 【历史上的今天】12 月 31 日:千年虫问题;DNA 计算之父出生;微机先驱 Cromemco 成立
  19. Python----空空如也
  20. C++桌面计算器(第一版)

热门文章

  1. Apache 2,4版本 编译与安装 RedHat enterprises 6.2
  2. OpenCV 读取一张图片并显示和保存
  3. 最全面的Linux指令大全
  4. Adobe Audition CC 2020中文版
  5. [致天天在园子里面喊迷茫的人们]毕业后的五年拉开大家差距的原因在哪里?[转]...
  6. DBvisualizer free 9.2.10 升级pro版本
  7. 笔试算法题及解答(Python)
  8. Java类文件结构详解
  9. 【Spring】—— 自动装配
  10. iptables一次性封多个ip,使用ipset 工具