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 相关文章推荐
xtree.js 代码
Mar 13 Javascript
Tinymce+jQuery.Validation使用产生的BUG
Mar 29 Javascript
浅谈js中的闭包
Mar 16 Javascript
JavaScript中匿名函数的用法及优缺点详解
Jun 01 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
Mar 08 Javascript
Vue渲染函数详解
Sep 15 Javascript
搭建element-ui的Vue前端工程操作实例
Feb 23 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
Sep 29 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
Oct 08 Javascript
jquery实现Ajax请求的几种常见方式总结
May 28 jQuery
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
Sep 10 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
Aug 14 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 smarty模版引擎中的缓存应用
2009/12/11 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
php-fpm中max_children的配置
2019/03/15 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
RR vs IO BO3 第二场2.13
2021/03/10 DOTA
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
如何修改Vue打包后文件的接口地址配置的方法
2020/04/22 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
Python MD5文件生成码
2009/01/12 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
Win8下python3.5.1安装教程
2020/07/29 Python
python三方库之requests的快速上手
2019/03/04 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
Python随机数函数代码实例解析
2020/02/09 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
python实现批量命名照片
2020/06/18 Python
Python中bisect的用法及示例详解
2020/07/20 Python
浅析python函数式编程
2020/09/26 Python
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
百度吧主申请感言
2014/01/12 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
工程技术员岗位职责
2014/03/02 职场文书
教育教学工作反思
2016/02/24 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
Go各时间字符串使用解析
2021/04/02 Golang