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 变量类型转换常用函数与代码[比较全]
Dec 01 Javascript
JavaScript判断变量是否为undefined的两种写法区别
Dec 04 Javascript
同一个网页中实现多个JavaScript特效的方法
Feb 02 Javascript
JavaScript中的small()方法使用详解
Jun 08 Javascript
AngularJS 中的Promise --- $q服务详解
Sep 14 Javascript
jquery实现弹窗功能(窗口居中显示)
Feb 27 Javascript
你有必要知道的10个JavaScript难点
Jul 25 Javascript
jQuery实现全选、反选和不选功能
Aug 16 jQuery
JavaScript屏蔽Backspace键的实现代码
Nov 02 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
Sep 02 Javascript
解决vue组件中click事件失效的问题
Nov 09 Javascript
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 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
php操作mysqli(示例代码)
2013/10/28 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
html中的input标签的checked属性jquery判断代码
2012/09/19 Javascript
jquery中one()方法的用法实例
2015/01/16 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
Move.js入门
2017/02/08 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
Vue自定义事件(详解)
2017/08/19 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
Python标准库内置函数complex介绍
2014/11/25 Python
详解Python的Django框架中的通用视图
2015/05/04 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
详解python内置模块urllib
2020/09/09 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
一些.net面试题
2014/10/06 面试题
地质灾害防治方案
2014/05/14 职场文书
文明和谐家庭事迹材料
2014/05/18 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript