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 相关文章推荐
网页前端优化之滚动延时加载图片示例
Jul 13 Javascript
探讨js中的双感叹号判断
Nov 11 Javascript
javascript读写json示例
Apr 11 Javascript
浅析javascript中的Event事件
Dec 09 Javascript
EsLint入门学习教程
Feb 17 Javascript
ligerUI---ListBox(列表框可移动的实例)
Nov 28 Javascript
angularjs select 赋值 ng-options配置方法
Feb 28 Javascript
Vue使用mixins实现压缩图片代码
Mar 14 Javascript
记一次webpack3升级webpack4的踩坑经历
Jun 12 Javascript
JS回调函数简单易懂的入门实例分析
Sep 29 Javascript
基于element-ui封装表单金额输入框的方法示例
Jan 06 Javascript
jquery实现广告上下滚动效果
Mar 04 jQuery
详解基于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 isset()与empty()的使用区别详解
2010/08/29 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP hebrev()函数用法讲解
2019/02/21 PHP
js滚动条回到顶部的代码
2011/12/06 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
Python新手实现2048小游戏
2015/03/31 Python
PyMongo安装使用笔记
2015/04/27 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
如何在python中判断变量的类型
2020/07/29 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
优秀毕业生求职信范文
2014/01/02 职场文书
建筑个人求职信范文
2014/01/25 职场文书
德育标兵事迹材料
2014/08/24 职场文书
2015年双拥工作总结
2015/04/08 职场文书
敬业奉献模范事迹材料(2016精选版)
2016/02/26 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书