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 相关文章推荐
Some tips of wmi scripting in jscript (1)
Apr 03 Javascript
javascript TextArea动态显示剩余字符
Oct 22 Javascript
jquery 双色表格实现代码
Dec 08 Javascript
更优雅的事件触发兼容
Oct 24 Javascript
javascript闭包的理解
Apr 01 Javascript
JavaScript获取页面中第一个锚定文本的方法
Apr 03 Javascript
纯javascript实现自动发送邮件
Oct 21 Javascript
理解js回收机制通俗易懂版
Feb 29 Javascript
关于angularJs指令的Scope(作用域)介绍
Oct 25 Javascript
基于JavaScript实现自定义滚动条
Jan 25 Javascript
记React connect的几种写法(小结)
Sep 18 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
Oct 09 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
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
PHP技术开发微信公众平台
2015/07/22 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
2018/12/10 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
Pandas的Apply函数具体使用
2020/07/21 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
软件测试英文面试题
2012/10/14 面试题
项目建议书范文
2014/05/12 职场文书
英文邀请函
2015/02/02 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
《司马光》教学反思
2016/02/22 职场文书
javascript的setTimeout()使用方法总结
2021/11/20 Javascript
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫