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 相关文章推荐
Array.slice()与Array.splice()的返回值类型
Oct 09 Javascript
基于javascript 闭包基础分享
Jul 10 Javascript
Flash图片上传组件 swfupload使用指南
Mar 14 Javascript
JavaScript将字符串转换成字符编码列表的方法
Mar 19 Javascript
jQuery EasyUI Pagination实现分页的常用方法
May 21 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
May 28 Javascript
原生JS实现图片轮播与淡入效果的简单实例
Aug 21 Javascript
AngularJS ng-style中使用filter
Sep 21 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
Sep 03 Javascript
VSCode插件安装完成后的配置(常用配置)
Aug 24 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
Oct 27 Javascript
Vue+Element-U实现分页显示效果
Nov 15 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+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
PHP--用万网的接口实现域名查询功能
2012/12/13 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
PHP 类与构造函数解析
2017/02/06 PHP
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
JQuery之拖拽插件实现代码
2011/04/14 Javascript
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
js jquery数组介绍
2012/07/15 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
Bootstrap栅格系统的使用和理解2
2016/12/14 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
ES6数组的扩展详解
2017/04/25 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
理解python多线程(python多线程简明教程)
2014/06/09 Python
介绍Python的@property装饰器的用法
2015/04/28 Python
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
详解python之协程gevent模块
2018/06/14 Python
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
初中三年毕业生的自我评价分享
2014/02/14 职场文书
中层干部培训方案
2014/06/16 职场文书
学校消防安全责任书
2014/07/23 职场文书
医德医风自我评价
2014/09/19 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
银行贷款委托书范本
2014/10/11 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
2015年实习生工作总结报告
2015/04/28 职场文书
闪闪的红星观后感
2015/06/08 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js