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 相关文章推荐
jquery1.4后 jqDrag 拖动 不可用
Feb 06 Javascript
jQuery基础框架浅入剖析
Dec 27 Javascript
jQuery实现点击标题输入详细信息
Apr 16 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
May 19 Javascript
offsetHeight在OnLoad中获取为0的现象
Jul 22 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
Jul 29 Javascript
js实现动态加载脚本的方法实例汇总
Nov 02 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
Jan 27 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
Jun 22 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
Aug 26 Javascript
简单了解Vue + ElementUI后台管理模板
Apr 07 Javascript
JavaScript实现猜数字游戏
May 20 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
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
PHP的栏目导航程序
2006/10/09 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
PHP排序算法类实例
2015/06/17 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
php利用array_search与array_column实现二维数组查找
2019/07/08 PHP
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
Jquery性能优化详解
2014/05/15 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
python实现证件照换底功能
2019/08/20 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
学生学习总结的自我评价
2013/10/22 职场文书
好邻里事迹材料
2014/01/16 职场文书
初中校园广播稿
2014/02/02 职场文书
学习雷锋标语
2014/06/25 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android