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基础语法让人疑惑的地方小结
May 23 Javascript
比较新旧两个数组值得增加和删除的JS代码
Oct 30 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
Dec 02 Javascript
JavaScript为事件句柄绑定监听函数实例详解
Dec 15 Javascript
浅谈js中StringBuffer类的实现方法及使用
Sep 02 Javascript
Javascript6中字符串的四个新用法分享
Sep 11 Javascript
jquery实现全选、全不选以及单选功能
Mar 23 jQuery
JS常用正则表达式总结【经典】
May 12 Javascript
js实现随机数字字母验证码
Jun 19 Javascript
快速了解vue-cli 3.0 新特性
Feb 28 Javascript
Angular angular-file-upload文件上传的示例代码
Aug 23 Javascript
token 机制和实现方式
Dec 15 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+JS+rsa数据加密传输实现代码
2011/03/23 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
ArrayList类(增强版)
2007/04/04 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
Python 列表(List)操作方法详解
2014/03/11 Python
Python 多进程和数据传递的理解
2017/10/09 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
Python常用数据分析模块原理解析
2020/07/20 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
把富文本的回车转为br标签
2019/08/09 HTML / CSS
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
俄罗斯家居用品购物网站:Евродом
2020/11/21 全球购物
精细化工应届生求职信
2013/11/17 职场文书
2015年教师新年寄语
2014/12/08 职场文书
安全保证书
2015/01/16 职场文书
统招统分证明
2015/06/23 职场文书
创业计划书之宠物店
2019/09/19 职场文书