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获取用户本地图片路径并显示的代码
Feb 16 Javascript
js将json格式内容转换成对象的方法
Nov 01 Javascript
Javascript封装DOMContentLoaded事件实例
Jun 12 Javascript
JavaScript判断表单为空及获取焦点的方法
Feb 12 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
Jul 09 Javascript
web前端开发upload上传头像js示例代码
Oct 22 Javascript
JS实现颜色动态淡化效果
Mar 06 Javascript
element-ui表格合并span-method的实现方法
May 21 Javascript
小程序组件之自定义顶部导航实例
Jun 12 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
Aug 20 Javascript
ES6对象操作实例详解
May 23 Javascript
vue监听键盘事件的相关总结
Jan 29 Vue.js
详解基于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
玩转图像函数库―常见图形操作
2006/09/03 PHP
用PHP和ACCESS写聊天室(一)
2006/10/09 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
Js动态创建div
2008/09/25 Javascript
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
JS 字符串连接[性能比较]
2009/05/10 Javascript
javascript开发技术大全-第1章javascript概述
2011/07/03 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
jQuery实现标题有打字效果的焦点图代码
2015/11/16 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
JS中setTimeout的巧妙用法前端函数节流
2016/03/24 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
2018/01/16 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
js实现碰撞检测
2021/01/29 Javascript
Python实现子类调用父类的方法
2014/11/10 Python
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
2017/12/18 Python
python调用opencv实现猫脸检测功能
2019/01/15 Python
美国Max仓库:Max Warehouse
2020/05/31 全球购物
校长岗位职责
2013/11/26 职场文书
证婚人搞笑证婚词
2014/01/10 职场文书
小学生考试获奖感言
2014/01/30 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
酒店七夕情人节活动策划方案
2014/08/24 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python
Python可视化神器pyecharts之绘制地理图表练习
2022/07/07 Python