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 相关文章推荐
TinyMCE 新增本地图片上传功能
Nov 05 Javascript
用JavaScript实现使用鼠标画线的示例代码
Aug 19 Javascript
js实现右下角提示框的方法
Feb 03 Javascript
jQuery实现高亮显示的方法
Mar 10 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
Sep 18 Javascript
教你JS中的运算符乘方、开方及变量格式转换
Aug 09 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
Jul 31 Javascript
Node实战之不同环境下配置文件使用教程
Jan 02 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
Jan 15 Javascript
vue中slot(插槽)的介绍与使用
Nov 12 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
Dec 13 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
Feb 20 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表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
详解angular element()方法使用
2017/04/08 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
Vue 中可以定义组件模版的几种方式
2019/08/06 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
[46:25]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第二局
2016/03/05 DOTA
Python编写检测数据库SA用户的方法
2014/07/11 Python
用Python实现协同过滤的教程
2015/04/08 Python
python中argparse模块用法实例详解
2015/06/03 Python
python 打印对象的所有属性值的方法
2016/09/11 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
Python Django搭建网站流程图解
2020/06/13 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
广播节目策划方案
2014/05/23 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js