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制作的产品广告效果
Dec 08 Javascript
jquery搜索框效果实现方法
Jan 16 Javascript
JS+CSS实现可拖动的弹出提示框
Feb 16 Javascript
JavaScript实现Flash炫光波动特效
May 14 Javascript
jQuery实现网站添加高亮突出显示效果的方法
Jun 26 Javascript
浅谈JavaScript中null和undefined
Jul 09 Javascript
javascript自动恢复文本框点击清除后的默认文本
Jan 12 Javascript
用jquery获取自定义的标签属性的值简单实例
Sep 17 Javascript
JS给Array添加是否包含字符串的简单方法
Oct 29 Javascript
纯js代码生成可搜索选择下拉列表的实例
Jan 11 Javascript
详解PHP后期静态绑定分析与应用
Mar 21 Javascript
在vue项目中使用md5加密的方法
Sep 14 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的Yii框架中日志的相关配置及使用
2015/12/08 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
JS 对象介绍
2010/01/20 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
在vue中给后台接口传的值为数组的格式代码
2020/11/12 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
Python中三元表达式的几种写法介绍
2019/03/04 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
利用python实现汉诺塔游戏
2021/03/01 Python
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
Internal修饰符有什么含义
2013/07/10 面试题
远程教育心得体会
2014/01/03 职场文书
技校毕业生个人学习的自我评价
2014/02/21 职场文书
大学生暑期实践感言
2014/02/26 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
经理岗位职责
2015/02/02 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android