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 相关文章推荐
$.ajax json数据传递方法
Nov 19 Javascript
jquery 简短右键菜单 多浏览器兼容
Jan 01 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
Mar 24 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
Nov 09 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
Mar 01 Javascript
屏蔽相应键盘按钮操作
Mar 10 Javascript
Javascript获取当前时间函数和时间操作小结
Oct 01 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
Aug 05 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
Jul 13 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
Sep 05 Javascript
小程序实现订单倒计时功能
Apr 23 Javascript
微信小程序tab左右滑动切换功能的实现代码
Feb 08 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使用mb_check_encoding检查字符串在指定的编码里是否有效
2013/11/07 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
JavaScript Chart 插件整理
2010/06/18 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
jquery代码规范让代码越来越好看
2017/02/03 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
react build 后打包发布总结
2018/08/24 Javascript
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2019/05/31 Javascript
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
Python使用GitPython操作Git版本库的方法
2020/02/29 Python
python模拟斗地主发牌
2020/04/22 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
python 还原梯度下降算法实现一维线性回归
2020/10/22 Python
python使用smtplib模块发送邮件
2020/12/17 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
存储过程的优点有哪些
2012/09/27 面试题
学校消防安全制度
2014/01/30 职场文书
科技之星事迹材料
2014/06/02 职场文书
学习考察心得体会
2014/09/04 职场文书
导游欢送词
2015/01/31 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书