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 相关文章推荐
asp 取文本框名称代码
Dec 02 Javascript
jquery 得到当前页面高度和宽度的两个函数
Feb 21 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
Mar 01 Javascript
jquery.post用法关于type设置问题补充
Jan 03 Javascript
jQuery实现数字加减效果汇总
Dec 16 Javascript
高性能JavaScript模板引擎实现原理详解
Feb 05 Javascript
jQuery ajax时间差导致的变量赋值问题分析
Jan 22 Javascript
Node.js文件操作方法汇总
Mar 22 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
Mar 15 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
Aug 25 Javascript
JavaScript箭头函数中的this详解
Jun 19 Javascript
Javascript原生ajax请求代码实例
Feb 20 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
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
php 函数中静态变量使用的问题实例分析
2020/03/05 PHP
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
详解使用WebPack搭建React开发环境
2019/08/06 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
python如何将图片转换为字符图片
2020/08/19 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
Python中作用域的深入讲解
2018/12/10 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
浅谈react路由传参的几种方式
2021/03/23 Javascript
金属材料工程个人求职的自我评价
2013/12/04 职场文书
求职信的最佳写作思路
2014/02/01 职场文书
公益广告宣传方案
2014/02/28 职场文书
生日答谢词
2015/01/05 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python