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 相关文章推荐
css配合jquery美化 select
Nov 29 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
Dec 22 Javascript
几种经典排序算法的JS实现方法
Mar 25 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
Jan 17 Javascript
AngularJs上传前预览图片的实例代码
Jan 20 Javascript
select下拉框插件jquery.editable-select详解
Jan 22 Javascript
微信小程序 参数传递实例代码
Mar 20 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
May 08 Javascript
JavaScript for循环 if判断语句(学习笔记)
Oct 11 Javascript
React props和state属性的具体使用方法
Apr 12 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
Jun 29 Javascript
详解JavaScript中分解数字的三种方法
Jan 05 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/02 PHP
smarty简单入门实例
2014/11/28 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
Laravel框架集合用法实例浅析
2020/05/14 PHP
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
利用js实现选项卡的特别效果的实例
2013/03/03 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
2017/03/29 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
JavaScript的setter与getter方法
2017/11/29 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
微信小程序实现评论功能
2018/11/28 Javascript
了解重排与重绘
2019/05/29 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
优化Python代码使其加快作用域内的查找
2015/03/30 Python
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
python 变量初始化空列表的例子
2019/11/28 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
高中体育教学反思
2014/01/24 职场文书
离婚财产分隔协议书
2014/10/23 职场文书