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中append、insertBefore、after与insertAfter的简单用法与注意事项
Apr 04 Javascript
JS 各种网页尺寸判断实例方法
Apr 18 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
May 04 Javascript
jQuery的position()方法详解
Jul 19 Javascript
浅谈json取值(对象和数组)
Jun 24 Javascript
js编写三级联动简单案例
Dec 21 Javascript
JS中用try catch对代码运行的性能影响分析
Dec 26 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
Jul 02 Javascript
Vue实现本地购物车功能
Dec 05 Javascript
layer.prompt输入层的例子
Sep 24 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
Nov 06 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
Sep 07 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初学者头疼问题总结
2006/07/08 PHP
第一节--面向对象编程
2006/11/16 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
PHP框架性能测试报告
2016/05/08 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
Vue.js第四天学习笔记
2016/12/02 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
vue 简单自动补全的输入框的示例
2018/03/12 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
JS实现页面侧边栏效果探究
2021/01/08 Javascript
Python发送Email方法实例
2014/08/21 Python
Python编程入门的一些基本知识
2015/05/13 Python
Python中with及contextlib的用法详解
2017/06/08 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
python读取文件名并改名字的实例
2019/01/07 Python
python并发编程 Process对象的其他属性方法join方法详解
2019/08/20 Python
Mysql数据库反向生成Django里面的models指令方式
2020/05/18 Python
英文自荐信
2013/12/19 职场文书
美化环境标语
2014/06/20 职场文书
单位工作证明
2014/10/07 职场文书
2015员工年度考核评语
2015/03/25 职场文书
导游词之崇武古城
2019/10/07 职场文书
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android