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 TextArea动态显示剩余字符
Oct 22 Javascript
将CKfinder整合进CKEditor3.0的新方法
Jan 10 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
Jun 24 Javascript
详解js实现线段交点的三种算法
Aug 09 Javascript
AngularJS 所有版本下载地址
Sep 14 Javascript
jQuery动态生成表格及右键菜单功能示例
Jan 13 Javascript
setTimeout函数的神奇使用
Feb 26 Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 Javascript
基于Vue单文件组件详解
Sep 15 Javascript
微信小程序 可搜索的地址选择实现详解
Aug 28 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
Sep 10 Javascript
JS简易计算器实例讲解
Jun 30 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图片加中文水印实现代码分享
2012/10/31 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
js对象内部访问this修饰的成员函数示例
2014/04/27 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
layui select获取自定义属性方法
2018/08/15 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
wxPython框架类和面板类的使用实例
2014/09/28 Python
Python实现从订阅源下载图片的方法
2015/03/11 Python
Python处理JSON数据并生成条形图
2016/08/05 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
Python unittest单元测试框架总结
2018/09/08 Python
Python3.0 实现决策树算法的流程
2019/08/08 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
python+requests接口自动化框架的实现
2020/08/31 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
DOM和JQuery对象有什么区别
2016/11/11 面试题
生物技术专业求职信
2014/06/10 职场文书
护士工作失误检讨书
2014/09/14 职场文书
英文导游词
2015/02/13 职场文书
赞助商致辞
2015/07/30 职场文书
2016年寒假见闻
2015/10/10 职场文书
php png失真的原因及解决办法
2021/10/24 PHP