全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JavaScript实现二分查找实例代码

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

/**
 * 二分查找,递归实现。
 * @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二分查找  # JavaScript中二分查找的例题详解  # JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】  # JavaScript折半查找(二分查找)算法原理与实现方法示例  # JS二分查找算法详解  # js基本算法:冒泡排序  # 二分查找的简单实例  # js实现的二分查找算法实例  # javascript实现二分查找法实现代码  # JS实现二分查找的示例代码  # 递归  # 第一个  # 写完  # 小编  # 在此  # 第二个  # 给大家  # 想了  # 不等于  # 自然而然  # 所述  # 如何使用  # 给我留言  # 感谢大家  # 疑问请  # 有任何  # 来得快  # arr  # target  # param 


相关文章: 建站之星在线客服如何快速接入解答?  公司网站设计制作厂家,怎么创建自己的一个网站?  音乐网站服务器如何优化API响应速度?  网站专业制作公司有哪些,做一个公司网站要多少钱?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  如何快速查询域名建站关键信息?  建设网站制作价格,怎样建立自己的公司网站?  临沂网站制作企业,临沂第三中学官方网站?  建站主机与服务器功能差异如何区分?  如何快速上传建站程序避免常见错误?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  制作网站的公司有哪些,做一个公司网站要多少钱?  如何零基础开发自助建站系统?完整教程解析  自助网站制作软件,个人如何自助建网站?  如何通过cPanel快速搭建网站?  湖北网站制作公司有哪些,湖北清能集团官网?  建站之星ASP如何实现CMS高效搭建与安全管理?  如何快速搭建高效WAP手机网站吸引移动用户?  建站之星安装路径如何正确选择及配置?  已有域名如何快速搭建专属网站?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  如何快速搭建个人网站并优化SEO?  建站之星安装后如何配置SEO及设计样式?  h5在线制作网站电脑版下载,h5网页制作软件?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  Bpmn 2.0的XML文件怎么画流程图  ,石家庄四十八中学官网?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  nginx修改上传文件大小限制的方法  简单实现Android文件上传  建站之星如何通过成品分离优化网站效率?  为什么Go需要go mod文件_Go go mod文件作用说明  ,制作一个手机app网站要多少钱?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  Python如何创建带属性的XML节点  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何在宝塔面板中修改默认建站目录?  如何通过智能用户系统一键生成高效建站方案?  小型网站制作HTML,*游戏网站怎么搭建?  如何用西部建站助手快速创建专业网站?  如何快速辨别茅台真假?关键步骤解析  如何通过山东自助建站平台快速注册域名?  建站之星代理商如何保障技术支持与售后服务? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。