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 相关文章推荐
Autocomplete Textbox Example javascript实现自动完成成功
Aug 17 Javascript
一个JS小玩意 几个属性相加不能超过一个特定值.
Sep 29 Javascript
JS 按钮点击触发(兼容IE、火狐)
Aug 07 Javascript
Javascript 读取操作Sql中的Xml字段
Oct 09 Javascript
基于jQuery实现下拉框
Nov 24 Javascript
JS获取iframe中longdesc属性的方法
Apr 01 Javascript
Vue-cli中为单独页面设置背景色的实现方法
Feb 11 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
Aug 27 Javascript
Vue resource三种请求格式和万能测试地址
Sep 26 Javascript
Vue.js 使用v-cloak后仍显示变量的解决方法
Nov 19 Javascript
vue单页应用的内存泄露定位和修复问题小结
Aug 02 Javascript
KnockoutJS数组比较算法实例详解
Nov 25 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
这部好评如潮的动漫 知名梗频出 但是画风劝退很多人
2020/03/08 日漫
关于文本留言本的分页代码
2006/10/09 PHP
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
php addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
js中prototype用法详细介绍
2013/11/14 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
vuex的使用步骤
2021/01/06 Vue.js
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
浅谈python jieba分词模块的基本用法
2017/11/09 Python
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
Python socket 套接字实现通信详解
2019/08/27 Python
如何获取Python简单for循环索引
2019/11/21 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
Ibatis如何使用动态表名
2015/07/12 面试题
博士研究生自我鉴定范文
2013/12/04 职场文书
2014年高考决心书
2014/03/11 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
运动会宣传语
2015/07/13 职场文书
机关单位2016年法制宣传日活动总结
2016/04/01 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python