js实现二分查找算法

2023-11-08

js实现二分查找算法

二分查找:是一种搜索某个值的索引的算法。

基本条件:有序的数组。

思路:1.将数组折半,分成左右两个数组。

2.判断要查找的数和中间位置数值的大小,来判断要查找的数实在哪一半。

3.之后继续折半查找,直至找到这个数。

方法:二分查找有两种方法,一种是非递归方式,采用while方式,判断是否符合要求。另一种是采用递归方式,采用if方式,依次递归,找到相应的值。
步骤一(非递归):

function binary_search(arr, key) {
    var low = 0,
        high = arr.length - 1;

    while (low <= high) {
        var mid = parseInt((high + low) / 2);
        if (key == arr[mid]) {
            return mid;
        } else if (key > arr[mid]) {
            low = mid + 1;
        } else if (key < arr[mid]) {
            high = mid - 1;
        } else {
            return -1;
        }
    }
}

步骤二 (递归):

 /**
 * 
 * @param {*} arr 已排好的数组
 * @param {*} low 第一个值的索引
 * @param 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js实现二分查找算法 的相关文章

  • 检测 jqGrid 单元格中的复选框事件

    我正在探索jqGrid在我学习 Javascript 和 jQuery 的过程中 我成功地把checkbox在网格单元中 太棒了 这是我所拥有的 myTable jqGrid colModel name cb index cb width
  • zone.js:140未捕获类型错误:无法读取属性“删除”

    我是 kendo ui 的新手 我在小提琴中开发了原型 删除确认窗口在那里工作正常 但是当我集成到我的代码库中时 我收到错误 Cannot read property remove at the line pai to delete rem
  • 节点遗留 url.parse 已弃用,用什么代替?

    require url parse someurl com page 已被仅弃用 并且我们严格的 linter 对此不满意 我尝试用互联网建议的内容替换我们的代码中的它new URL someurl com page 在大多数情况下都有效
  • Brunch 源映射:在 Chrome 开发工具中未命中断点

    我正在使用 Brunch 中内置的默认源映射 我看到文件很好 但无法在源映射文件中命中断点 使用 Javascript 访问调试器debugger 有效 这让我相信早午餐方面出了问题 这是我的 brunch config js module
  • 在 ajax 请求上启用 jQuery contextMenu 项

    我正在尝试更新上下文菜单 http medialize github com jQuery contextMenu docs htmlitem 如果 ajax 请求改变了我的 div 内容 这就是我的意思 我有一个这样的 div div c
  • querySelector 搜索直接子级[重复]

    这个问题在这里已经有答案了 我有一些类似 jquery 的函数 function elem return gt someselector elem 问题是我怎样才能做同样的事情querySelector 问题是 gt 选择器中querySe
  • 玉石压痕错误

    因此 对于我的 Express 网站 我使用 jade 所以我决定尝试修改我的布局文件 以便我可以开始设计我的网站 我修改了原始布局代码 有效 但我开始在任何扩展布局的文件中出现缩进错误 如下所示 500 Error home kevin
  • 如何正确地将节点从引用传递到上下文?

    我正在尝试将节点从引用传递到上下文 但是因为我在第一次渲染后没有重新渲染 所以传递的节 点是null 我考虑了两种变体 但我认为它们不是最好的 To pass ref代替ref current 但在用例中 我将被迫使用类似的东西contex
  • 如何在 Windows 网络中的 Intranet Web 应用程序中获取用户的用户名

    我内部有一个简单的 HTML 页面 它只显示一个表单并要求用户填写 我想自动捕获Windows域用户名和机器名 并将其与表单中收集的数据一起提交 我可以在客户端这样做吗 HTML JavaScript 或者我被迫在服务器端执行此操作 我还不
  • 在动态创建的元素的onclick函数的属性中传递一个字符串

    我试图在动态创建的锚元素的 onClick 事件处理函数的参数中传递一个字符串 请参阅小提琴http jsfiddle net shmdhussain bXYe4 http jsfiddle net shmdhussain bXYe4 我无
  • 为什么我可以使用 Date 对象进行数学运算? [复制]

    这个问题在这里已经有答案了 当我像这样减去两个日期对象时 const startTime new Date await someAsyncStuff const endTime new Date const elapsedTime endT
  • 指定 HTML5 输入类型 = 日期的值输出?

    我想将本机日期选择器添加到我的应用程序中 该应用程序当前使用遗留的本地系统 日期输入支持尚未广泛普及 但如果我可以基于兼容性提供这两种实现 那就太理想了 有没有办法指定 HTML 日期选择器给出的值的输出 歌剧的默认设置是yyyy mm d
  • 为什么这个递归函数返回未定义?

    我正在尝试编写一个使用递归组合两个字符串的函数 我的代码如下 但我不知道为什么该函数返回未定义 特别是当我在基本情况下使用 console log 时 它不会打印未定义而是打印正确的值 var str3 function merge str
  • 如何将React JS状态保存到本地存储中

    我不知道如何将 React js 状态存储到本地存储中 import React Component from react import App css import auth createUserProfileDocument from
  • 使用 eval 时不会受到 XSS 威胁

    我正在制作 不是现在 但我仍然对这个感到好奇 一款使用 HTML5 和 JS 的游戏 我想要的是人们可以插入自定义脚本 但要安全 function executeCustomJS code eval code bad 当然这段代码非常糟糕
  • chrome 选项卡/窗口中的 window.open 行为

    我有一小段 javascript 旨在打开两个或更多选项卡 这在 FF 和 IE 中工作正常 但 chrome 会在新窗口而不是选项卡中打开第二个窗口 它不依赖于 url 因为我已经尝试过使用两个相同的 url 第一个在选项卡中打开 第二个
  • WebpackError:ReferenceError:Gatsby 上未定义窗口

    我已经在互联网上进行了大量搜索 但无法解决这个问题 我正在使用 Gasby 开发静态页面 但遇到此错误 WebpackError ReferenceError window is not defined 我的线索是 这与我正在使用的引导 模
  • 如何计算一行中Flexbox项目的数量?

    网格是使用 CSS flexbox 实现的 Example http jsbin com jumosicasi edit html css js output 本示例中的行数为 4 因为我出于演示目的固定了容器宽度 但是 实际上 它可以根据
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 拉斐尔路径交叉点不起作用

    我对拉斐尔和 pathIntersection method JSFiddle 示例 http jsfiddle net t6gWt 2 您可以看到有两条线都与曲线相交 但当我使用 pathIntersection method 有一个未解

随机推荐

  • 前端vue+axios实现关闭/刷新页面前向后台接口发送请求

    实现监听浏览器三种离开页面的方式 代码 created window addEventListener beforeunload e gt this updateHandler e destroyed window removeEventL
  • 教你使用Python Statsmodel进行假设检验和线性回归

    如果你使用 Python 处理数据 你可能听说过 statsmodel 库 Statsmodels 是一个 Python 模块 它提供各种统计模型和函数来探索 分析和可视化数据 该库广泛用于学术研究 金融和数据科学 在本文中 我们将介绍 s
  • C语言求矩阵行最简型及其秩

    注意 re row element ce column element include
  • Java 堆内存是线程共享的吗?

    本文部分援引于作者Hollis大神 原文链接 问题引出 1 堆是线程共享的内存区域 栈是线程独享的区域 2 堆主要存放对象实例 栈中主要存放各种基本数据类型 对象的引用 以上两个结论其实不完全正确 在解答之前 先想想Java 对象的内存分配
  • element ui 更换主题色

    一 安装scss包 npm install save dev sass loader npm install save dev node sass 在这说一下 node node sass sass loader存在版本兼容问题需要选择合适
  • 爬虫搭建IP代理

    大家好 作为一名爬虫从业者 我们都知道使用IP代理可以帮助我们避免被屏蔽 获取不同地理位置的数据等等 但是在选择IP代理时 我们可能会遇到一些困难 例如代理服务器速度慢 不稳定 不安全等问题 今天我想和大家分享几款好用的IP代理商 Smar
  • 开关电源学习笔记10 --- Zeta变换器

    Zeta变换器 原理电路如下 输入 输出极性相同 可升降压 开关管驱动困难 实际中比较少使用 假设已经达到了平衡状态 工作情况如下 由于处于平衡状态 所以任何储能元件 在开关断开和闭合的两个过程 必然是一个充能 一个放能 SW闭合后 输入电
  • 重新学javaweb---cookie&&session

    会话技术 1 浏览器开始访问网站到访问网站结束期间产生的多次请求响应组合在一起叫做一次会话 会话的过程中会产生会话相关的数据 我们需要将这些数据保存起来 Cookie 客户端技术 Session 服务器端技术 2 Cookie Cookie
  • 161.rocketmq安装、使用

    目录 一 下载安装并启动 1 下载 2 配置环境变量 3 启动rocketmq 1 启动nameserver
  • 线性拟合——从最大似然估计到平方误差到huber loss

    分享一下我老师大神的人工智能教程 零基础 通俗易懂 风趣幽默 还带黄段子 希望你也加入到我们人工智能的队伍中来 https blog csdn net jiangjunshow 考虑这样一些数据 x np array 0 3 9 14 15
  • Unity——小地图实现的办法

    一 使用摄像机跟随的办法实现 1 先创建一个Canvas画布 2 创建一个Raw Image来存放一会摄像机捕捉的画面 并且调整位置 3 在Scenes 也就是场景文件夹下 下创建一个 Render Texture 并且重命名为MidCam
  • Qt+Mingw环境(32位+64位)

    MinGW w64 for 32 and 64 bit Windows下载地址 文件 mingw w64 install exe 在线安装包 https sourceforge net projects mingw w64 files mi
  • 关于z域利用零极点快速判断滤波特性

    极点在右零点在左是低通 极点在左零点在右是高通 极点在零点中间是带通 零点在极点中间是带阻
  • 用Python语言编写账户类实现各种操作

    第一 先定义类后再创建账户 第二 写存款的实现方法 添加if进行判断存款的姓名和密码是否等于之前创建账户的信息 第三 写取款的 但要注意实现过程中满足之前存款大于取款 需要添加if来判断是否合理 第四 查询账户的各种信息 if判断查询账户姓
  • Unity 使用谷歌内购的密钥( license key )

    文章的内容主要是说明使用 Unity 接入谷歌内购IAP时 所需要的 license key 在哪里 如下图所示 看了下面的提示发现已经找不到这个 license key 了 打开 Google Play Console 在右侧找到创收设置
  • MFC通过com接口操作Excel

    整体思路 http wenku baidu com view d7383548767f5acfa1c7cd30 一些细节 对字体 边框 线条等操作引用Excel的枚举类型数据报错 提示没定义 的解决方案 打开头文件 把 import D P
  • MVC模式有哪些优缺点?

    优点 1 耦合性低 视图层和业务层分离 这样就允许更改视图层代码而不用重新编译模型和控制器代码 同样 一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可 因为模型与控制器和视图相分离 所以很容易改变应用程序的数据层和业务规则
  • Linux dstat监控工具简讲

    1 小声哔哔 记得在19年的年末 我第一次接触sar命令时将其奉为经典 至今看来仍不为过 可见我之前的博客 运维入门必备Linux sar命令 说回今天我们的工具dstat 与sar命令很相像 都很全面且强大 但是dstat更类似于看板 可
  • 成电信软程算I 雨课堂答案

    电子科技大学 信息与软件工程学院 程序设计与算法基础I 雨课堂答案 选择题因为限制 直接展示正确答案的文本选项 蓝色加粗为解析 第一章 程序设计引论 计算机系统由硬件和软件构成 它们共同工作来运行应用程序 程序员必须要关心底层硬件的细节 程
  • js实现二分查找算法

    js实现二分查找算法 二分查找 是一种搜索某个值的索引的算法 基本条件 有序的数组 思路 1 将数组折半 分成左右两个数组 2 判断要查找的数和中间位置数值的大小 来判断要查找的数实在哪一半 3 之后继续折半查找 直至找到这个数 方法 二分