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笔记一 js以及json基础使用说明
May 22 Javascript
jquery 使用简明教程
Mar 05 Javascript
Javascript 运动中Offset的bug解决方案
Dec 24 Javascript
第三章之Bootstrap 表格与按钮功能
Apr 25 Javascript
jQuery表格的维护和删除操作
Feb 03 Javascript
js a标签点击事件
Mar 30 Javascript
Vue.js上下滚动加载组件的实例代码
Jul 17 Javascript
微信小程序block的使用教程
Apr 01 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
Apr 14 Javascript
jQuery实现颜色打字机的完整代码
Mar 19 jQuery
解决Vue @submit 提交后不刷新页面问题
Jul 18 Javascript
解决antd Form 表单校验方法无响应的问题
Oct 27 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基础知识:类与对象(5) static
2006/12/13 PHP
php 进度条实现代码
2009/03/10 PHP
CodeIgniter与PHP5.6的兼容问题
2015/07/16 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
JS文本框默认值处理详解
2013/07/10 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
2019/04/10 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
在Python的Django框架中加载模版的方法
2015/07/16 Python
关于Python数据结构中字典的心得
2017/12/04 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
使用EduBlock轻松学习Python编程
2018/10/08 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
浅析Python requests 模块
2020/10/09 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
解释一下Windows的消息机制
2014/01/30 面试题
《少年王冕》教学反思
2014/04/11 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
鲁迅故居导游词
2015/02/05 职场文书
新闻稿件写作范文
2015/07/18 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技
Elasticsearch 配置详解
2022/04/19 Java/Android
Python实现简单得递归下降Parser
2022/05/02 Python