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学习笔记(十七) 检测浏览器插件代码
Jun 20 Javascript
js模拟点击事件实现代码
Nov 06 Javascript
js函数在frame中的相互调用详解
Mar 03 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
May 05 Javascript
Javascript封装DOMContentLoaded事件实例
Jun 12 Javascript
Javascript实现飞动广告效果的方法
May 25 Javascript
Webpack中css-loader和less-loader的使用教程
Apr 27 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
Jan 25 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
Sep 13 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
Jul 10 Javascript
微信小程序登录时如何获取input框中的内容
Dec 04 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
May 03 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缓冲区为你的站点加速
2015/10/10 PHP
PHP类的特性实例分析
2016/09/28 PHP
php的4种常用运行方式详解
2016/12/22 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
Javascript复制实例详解
2016/01/28 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
利用aardio给python编写图形界面
2017/08/21 Python
python基础练习之几个简单的游戏
2017/11/10 Python
Python类的继承用法示例
2019/01/31 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
python re模块和正则表达式
2021/03/24 Python
外贸业务员求职自荐信分享
2013/09/21 职场文书
创新社会管理心得体会
2014/09/12 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
react如何快速设置文件路径别名
2021/04/28 Javascript
Python爬取某拍短视频
2021/06/11 Python
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫