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 SocialHistory 检查访问者是否访问过某站点
Aug 02 Javascript
让IE6支持min-width和max-width的方法
Jun 25 Javascript
基于jquery的获取浏览器窗口大小的代码
Mar 28 Javascript
jQuery带时间的日期控件代码分享
Aug 26 Javascript
ES6通过babel转码使用webpack使用import关键字
Dec 13 Javascript
jQuery树插件zTree使用方法详解
May 02 jQuery
Node.js编写CLI的实例详解
May 17 Javascript
vue-cli + sass 的正确打开方式图文详解
Oct 27 Javascript
浅谈React的最大亮点之虚拟DOM
May 29 Javascript
vue router 源码概览案例分析
Oct 09 Javascript
checkbox在vue中的用法小结
Nov 13 Javascript
vue addRoutes路由动态加载操作
Aug 04 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通过function_exists检测函数是否存在的方法
2015/03/18 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
orm获取关联表里的属性值
2016/04/17 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
JavaScript 继承详解(四)
2009/07/13 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
JavaScript检测鼠标移动方向的方法
2015/05/22 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
Python求导数的方法
2015/05/09 Python
如何使用python爬取csdn博客访问量
2016/02/14 Python
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
python将数组n等分的实例
2019/12/02 Python
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
比利时家具购买网站:Home24
2019/01/03 全球购物
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
linux面试题参考答案(9)
2015/01/07 面试题
工作建议书范文
2014/05/13 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
护理专业自荐书
2014/06/04 职场文书
贫困证明怎么写
2015/06/16 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python