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 相关文章推荐
AngularJS进行性能调优的7个建议
Dec 28 Javascript
bootstrap学习笔记之初识bootstrap
Jun 21 Javascript
完美实现八种js焦点轮播图(下篇)
Apr 20 Javascript
JQuery遍历元素的后代和同胞实现方法
Sep 18 Javascript
详解vue.js的devtools安装
May 26 Javascript
JavaScript实现瀑布流图片效果
Jun 30 Javascript
深入理解Vue.js源码之事件机制
Sep 27 Javascript
JavaScript数据结构之单链表和循环链表
Nov 28 Javascript
JS伪继承prototype实现方法示例
Jun 20 Javascript
Vue核心概念Action的总结
Jan 18 Javascript
详解可以用在VS Code中的正则表达式小技巧
May 14 Javascript
vuex存储token示例
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 Google的translate API代码
2008/12/10 PHP
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
如何编写jquery插件
2017/03/29 jQuery
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
2017/10/09 Javascript
Vue配置marked链接添加target=&quot;_blank&quot;的方法
2019/07/19 Javascript
Angular之jwt令牌身份验证的实现
2020/02/14 Javascript
vue监听dom大小改变案例
2020/07/29 Javascript
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
Python整数对象实现原理详解
2019/07/01 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
python tkinter实现连连看游戏
2020/11/16 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
校领导推荐信
2013/11/01 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python
python如何将mat文件转为png
2022/07/15 Python