JS二分查找算法详解


Posted in Javascript onNovember 01, 2017

二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤:

(1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步。
(2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后重复第一步的操作。
(3)如果某一步数组为空,则表示找不到目标元素。

参考代码:

// 非递归算法
  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;
    }
   }
  };
  var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
  var result = binary_search(arr,10);
  alert(result); // 9 返回目标元素的索引值  

 // 递归算法
  function binary_search(arr,low, high, key) {
   if (low > high){
    return -1;
   }
   var mid = parseInt((high + low) / 2);
   if(arr[mid] == key){
    return mid;
   }else if (arr[mid] > key){
    high = mid - 1;
    return binary_search(arr, low, high, key);
   }else if (arr[mid] < key){
    low = mid + 1;
    return binary_search(arr, low, high, key);
   }
  };
  var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
  var result = binary_search(arr, 0, 13, 10);
  alert(result); // 9 返回目标元素的索引值

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
关于JavaScript中var声明变量作用域的推断
Dec 16 Javascript
jquery $.getJSON()跨域请求
Dec 21 Javascript
js实现简单选项卡与自动切换效果的方法
Apr 10 Javascript
在线所见即所得HTML编辑器的实现原理浅析
Apr 25 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
May 18 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
May 05 Javascript
详解vue 模版组件的三种用法
Jul 21 Javascript
JavaScript html5 canvas实现图片上画超链接
Oct 20 Javascript
微信小程序之onLaunch与onload异步问题详解
Mar 28 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
May 13 Javascript
解决layui数据表格Date日期格式的回显Object的问题
Sep 19 Javascript
Vue插件之滑动验证码
Sep 21 Javascript
ES7中利用Await减少回调嵌套的方法详解
Nov 01 #Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
Nov 01 #Javascript
bootstrap Table的一些小操作
Nov 01 #Javascript
react-native fetch的具体使用方法
Nov 01 #Javascript
Vue异步加载about组件
Oct 31 #Javascript
微信小程序顶部可滚动导航效果
Oct 31 #Javascript
React Native使用Modal自定义分享界面的示例代码
Oct 31 #Javascript
You might like
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
2007/04/16 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
python使用mailbox打印电子邮件的方法
2015/04/30 Python
处理Python中的URLError异常的方法
2015/04/30 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
python中的计时器timeit的使用方法
2017/10/20 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
python3获取url文件大小示例代码
2019/09/18 Python
python__new__内置静态方法使用解析
2020/01/07 Python
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
Python里面search()和match()的区别
2016/09/21 面试题
禁止酒驾标语
2014/06/25 职场文书
歌咏比赛主持词
2015/06/29 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
SpringRetry重试框架的具体使用
2021/07/25 Java/Android