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 相关文章推荐
Jquery 组合form元素为json格式,asp.net反序列化
Jul 09 Javascript
在chrome中window.onload事件的一些问题
Mar 01 Javascript
HTML Dom与Css控制方法
Oct 25 Javascript
javascript数组去重3种方法的性能测试与比较
Mar 26 Javascript
Extjs优化(二)Form表单提交通用实现
Apr 15 Javascript
禁止按回车键提交表单的方法
Jun 11 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
Jul 07 Javascript
JavaScript浮点数及运算精度调整详解
Oct 21 Javascript
Vue.js组件tabs实现选项卡切换效果
Dec 01 Javascript
Vue.js组件通信的几种姿势
Oct 23 Javascript
使用vue实现HTML页面生成图片的方法
Mar 12 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
Dec 04 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多文件上传实现代码
2014/02/20 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
JavaScript的类型简单说明
2010/09/03 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
jquery代码实现简单的随机图片瀑布流效果
2015/04/20 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
js构造函数创建对象是否加new问题
2018/01/22 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
python目录与文件名操作例子
2016/08/28 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
Python Numpy 数组的初始化和基本操作
2018/03/13 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
庆国庆活动总结
2014/08/28 职场文书
教育合作协议范本
2014/10/17 职场文书
给老婆的检讨书
2015/01/27 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
Python基础之常用库常用方法整理
2021/04/30 Python