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 相关文章推荐
jQuery+ajax实现顶一下,踩一下效果
Jul 17 Javascript
jQuery实现id模糊查询的小例子
Mar 19 Javascript
jQuery对象和Javascript对象之间转换的实例代码
Mar 20 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
May 26 Javascript
js判断浏览器版本以及浏览器内核的方法
Jan 20 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
Oct 10 Javascript
全面解析Bootstrap弹窗的实现方法
Dec 01 Javascript
简单介绍jsonp 使用小结
Jan 27 Javascript
全面解析JavaScript中apply和call以及bind(推荐)
Jun 15 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
Jun 13 Javascript
AngularJS实现图片上传和预览功能的方法分析
Nov 08 Javascript
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
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实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
JavaScript中的Window窗口对象
2008/01/16 Javascript
js 操作符实例代码
2009/10/24 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
jquery解析json格式数据的方法(对象、字符串)
2015/11/24 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
详解Vite的新体验
2021/02/22 Javascript
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
解决Django模板无法使用perms变量问题的方法
2017/09/10 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
django model object序列化实例
2020/03/13 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
南京某软件公司的.net面试题
2015/11/30 面试题
学校司机岗位职责
2013/11/14 职场文书
采购主管的岗位职责
2013/12/17 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
2014年妇女工作总结
2014/12/06 职场文书
上课讲话检讨书范文
2015/05/07 职场文书
春晚观后感
2015/06/11 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书