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 图片缩放(按比例)控制代码
May 27 Javascript
ExtJS GridPanel 根据条件改变字体颜色
Mar 08 Javascript
侧栏跟随滚动的简单实现代码
Mar 18 Javascript
JS实现OCX控件的事件响应示例
Sep 17 Javascript
原生js制作简单的数字键盘
Apr 24 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
Sep 24 Javascript
JavaScript实现斗地主游戏的思路
Feb 29 Javascript
利用vue和element-ui设置表格内容分页的实例
Mar 02 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
Aug 08 Javascript
layui实现点击按钮给table添加一行
Aug 10 Javascript
JavaScript使用Math.random()生成简单的验证码
Jan 21 Javascript
Js数组扁平化实现方法代码总汇
Nov 11 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将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
获取url中用&amp;隔开的参数实例(分享)
2017/05/28 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
python类继承与子类实例初始化用法分析
2015/04/17 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
MCM英国官网:奢侈皮具制品
2017/04/18 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
争先创优心得体会
2014/09/12 职场文书
田径运动会通讯稿
2014/09/13 职场文书
大班下学期个人总结
2015/02/13 职场文书
校友回访母校寄语
2015/02/26 职场文书
行政经理岗位职责
2015/04/15 职场文书
倡议书的格式写法
2015/04/28 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
Django实现drf搜索过滤和排序过滤
2021/06/21 Python