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 相关文章推荐
完美解决JS中汉字显示乱码问题(已解决)
Dec 27 Javascript
jQuery is()函数用法3例
May 06 Javascript
浅谈javascript中的闭包
May 13 Javascript
jquery利用拖拽方式在图片上添加热链接
Nov 24 Javascript
js+html5实现canvas绘制网页时钟的方法
May 21 Javascript
限制复选框最多选择项的实现代码
May 30 Javascript
jQuery原理系列-css选择器的简单实现
Jun 07 Javascript
js简单正则验证汉字英文及下划线的方法
Nov 28 Javascript
js实现水平滚动菜单导航
Jul 21 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
Jan 31 Javascript
jquery获取input输入框中的值
Nov 13 jQuery
在react-antd中弹出层form内容传递给父组件的操作
Oct 24 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 无法载入mysql扩展
2010/03/12 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
怎么清空javascript数组
2013/05/11 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
javascript控制台详解
2015/06/25 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
angular 组件通信的几种实现方式
2018/07/13 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
详解python中的json和字典dict
2018/06/22 Python
Django开发中的日志输出的方法
2018/07/02 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
python文本数据处理学习笔记详解
2019/06/17 Python
Python的log日志功能及设置方法
2019/07/11 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
python urllib和urllib3知识点总结
2021/02/08 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
经典优秀个人求职自荐信格式
2013/09/25 职场文书
运动会广播稿200米
2014/01/27 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
大学生职业生涯规划大赛作品(精品)
2014/09/17 职场文书
个人投资合作协议书
2014/10/12 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
小孩不笨观后感
2015/06/03 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python