JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】


Posted in Javascript onFebruary 22, 2019

本文实例讲述了JavaScript数据结构与算法之检索算法。分享给大家供大家参考,具体如下:

javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

/*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/
function qSort(arr){
  if (arr.length == 0) {
    return [];
  }
  var left = [];//存储小于基准值
  var right = [];//存储大于基准值
  var pivot = arr[0];
  for (var i = 1; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return qSort(left).concat(pivot, qSort(right));//递归
}
/*二分查找法,基本原理如下:
* 将数组的第一个位置设置为下边界(0).将数组的最后一个元素所在的位置设置为上边界(数组的长度减1)。
* 若下边界等于或小于上边界,则做如下操作:
*  (1).将中点设置为(上边界加上下边界) 除以2.
*  (2). 如果中点的元素小于查询的值,则将下边界设置为中点元素所在下标加1.
*  (3). 如果中点的元素大于查询的值,则将上边界设置为中点元素所在下标减1.
*  (4). 否则中点元素即为要查找 的数据,可以进行返回。*/
function binSearch(arr,data) {
  var lowerBound = 0;
  var upperBound = arr.length - 1;
  while(lowerBound <= upperBound) {
    var mid = Math.floor((upperBound + lowerBound)/2);
    if(arr[mid] < data) {
      lowerBound = mid + 1;
    }else if(arr[mid] > data) {
      upperBound = mid - 1;
    }else {
      return mid;
    }
  }
  return -1;
}
/*
*计算重复次数
*当binSearch()函数找到某个值时,如果在数据集中还有其他相同的值出现,那么该函数会定位在类似值的附近。
*换句话说,其他相同的值可能会出现已找到值的左边或右边。
*如果在数据集中能找到这个值,那么这个函数将开始通过两个循环来统计这个值出现的次数。
*第一个循环向下遍历数组,统计找到的值出现的次数,当下一个值与要查找的值不匹配时则停止计数。
*第二个循环向上遍历数组,统计找到的值出现的次数,当下一个值与要查找的值不匹配时则停止计数。
* */
function count(arr, data) {
  var count = 0;
  var position = binSearch(arr, data);
  if (position > -1) {
    ++count;
    for (var i = position-1; i > 0; --i) {
      if (arr[i] == data) {
        ++count;
      }
      else {
        break;
      }
    }
    for (var i = position+1; i < arr.length; ++i) {
      if (arr[i] == data) {
        ++count;
      }
      else {
        break;
      }
    }
  }
  return count;
}
var nums = [90,43,49,15,23,2,70,23,20,95,69,23,29,26];
var list = qSort(nums);
console.log(list);
var findnum = 23;
console.log("需要查找的数据为: " + findnum);
var retVal = binSearch(list, findnum);
if (retVal >= 0) {
  console.log( "找到 " + findnum + "的位置为: "+retVal);
}else {
  console.log(" is not in array.");
}
console.log(findnum + "重复次数为"+count(list, findnum));

使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码,可得如下运行结果:

JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
根据配置文件加载js依赖模块
Dec 29 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
May 24 Javascript
需要牢记的JavaScript基础知识
Sep 25 Javascript
ES7中利用Await减少回调嵌套的方法详解
Nov 01 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
Dec 26 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
Jan 02 Javascript
vue.js使用watch监听路由变化的方法
Jul 08 Javascript
优雅的处理vue项目异常实战记录
Jun 05 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
Aug 27 Javascript
关于JS解构的5种有趣用法
Sep 05 Javascript
解决layui调用自定义方法提示未定义的问题
Sep 14 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
Mar 02 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
Feb 22 #Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
Feb 22 #Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
Feb 21 #Javascript
用Fundebug插件记录网络请求异常的方法
Feb 21 #Javascript
VUE搭建手机商城心得和遇到的坑
Feb 21 #Javascript
利用vue重构有赞商城的思路以及总结整理
Feb 21 #Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
Feb 21 #Javascript
You might like
PHP引用符&amp;的用法详细解析
2013/08/22 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
PHP开发制作一个简单的活动日程表Calendar
2016/06/20 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
2019/03/11 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
js类型检查实现代码
2010/10/29 Javascript
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
2018/04/25 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
Python批量修改图片分辨率的实例代码
2019/07/04 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
python不同系统中打开方法
2020/06/23 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
致800米运动员广播稿
2014/02/16 职场文书
毕业生自荐信格式
2014/03/07 职场文书
亮化工程实施方案
2014/03/17 职场文书
工作失职检讨书(精华篇)
2014/10/15 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
bat批处理之字符串操作的实现
2022/03/16 Python
MySQL插入数据与查询数据
2022/03/25 MySQL