JavaScript实现二分查找实例代码


Posted in Javascript onFebruary 22, 2017

二分查找的前提为:数组、有序。逻辑为:优先和数组的中间元素比较,如果等于中间元素,则直接返回。如果不等于则取半继续查找。

/**
 * 二分查找,递归实现。
 * @param target
 * @param arr
 * @param start
 * @param end
 * @returns {*}
 */
function binarySearch(target,arr,start,end) {
  var start  = start || 0;
  var end   = end || arr.length-1;
  var mid = parseInt(start+(end-start)/2);
  if(target==arr[mid]){
    return mid;
  }else if(target>arr[mid]){
    return binarySearch(target,arr,mid+1,end);
  }else{
    return binarySearch(target,arr,start,mid-1);
  }
  return -1;
}
/**
 * 有序的二分查找,返回-1或存在的数组下标。不使用递归实现。
 * @param target
 * @param arr
 * @returns {*}
 */
function binarySearch(target,arr) {
  var start  = 0;
  var end   = arr.length-1;
  while (start<=end){
    var mid = parseInt(start+(end-start)/2);
    if(target==arr[mid]){
      return mid;
    }else if(target>arr[mid]){
      start  = mid+1;
    }else{
      end   = mid-1;
    }
  }
  return -1;
}

写完有序,自然而然的想到了无序的情况如何使用二分查找呢?马上想到先使用快排分组,分好组再二分。代码如下:

/**
 * 无序的二分查找。返回true/false
 * @param target
 * @param arr
 * @returns {boolean}
 */
function binarySearch(target,arr) {
  while (arr.length>0){
    //使用快速排序。以mid为中心划分大小,左边小,右边大。
    var left  = [];
    var right  = [];
    //选择第一个元素作为基准元素(基准元素可以为任意一个元素)
    var pivot  = arr[0];
    //由于取了第一个元素,所以从第二个元素开始循环
    for(var i=1;i<arr.length;i++){
      var item = arr[i];
      //大于基准的放右边,小于基准的放左边
      item>pivot ? right.push(item) : left.push(item);
    }
    //得到经过排序的新数组
    if(target==pivot){
      return true;
    }else if(target>pivot){
      arr   = right;
    }else{
      arr   = left;
    }
  }
  return false;
}

写完用快速排序实现的无序二分查找,仔细想了一下该算法的时间复杂度,发现还不如直接一个for循环来得快

以上所述是小编给大家介绍的JavaScript实现二分查找实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JS小功能(操作Table--动态添加删除表格及数据)实现代码
Nov 28 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
Apr 08 Javascript
js判断上传文件类型判断FileUpload文件类型代码
May 20 Javascript
jquery实现最简单的滑动菜单效果代码
Sep 12 Javascript
javascript实现省市区三级联动下拉框菜单
Nov 17 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
Nov 26 Javascript
easyui combobox开启搜索自动完成功能的实例代码
Nov 08 Javascript
js正则取值的结果数组调试方法
Oct 10 Javascript
详解Vue2 添加对scss的支持
Jan 02 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
Sep 11 Javascript
如何在JavaScript中正确处理变量
Dec 25 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
Feb 15 Javascript
浅谈jquery拼接字符串效率比较高的方法
Feb 22 #Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
Feb 22 #Javascript
原生JS实现幻灯片
Feb 22 #Javascript
微信小程序 解析网页内容详解及实例
Feb 22 #Javascript
从零学习node.js之简易的网络爬虫(四)
Feb 22 #Javascript
js中document.referrer实现移动端返回上一页
Feb 22 #Javascript
基于JS实现bookstore静态页面的实例代码
Feb 22 #Javascript
You might like
php设计模式 Singleton(单例模式)
2011/06/26 PHP
再Docker中架设完整的WordPress站点全攻略
2015/07/29 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
在Python的Django框架中加载模版的方法
2015/07/16 Python
python 爬取微信文章
2016/01/30 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
python中如何使用朴素贝叶斯算法
2017/04/06 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
Python LMDB库的使用示例
2021/02/14 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
乡镇四风对照检查材料
2014/08/31 职场文书
平面设计师岗位职责
2014/09/18 职场文书
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
2022/07/15 Java/Android