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));

javascript数据结构与算法---检索算法(二分查找法、计算重复次数)相关推荐

  1. 算法(一):二分查找法

    算法基础: 一.大O表示法: 指示算法的速度有多快,用于指出随数量的增大,算法的所需步骤增加的速度,常见的大O运行时间(时间复杂度): O(1)表示常数阶时间复杂度 O(log n),也叫对数时间复杂 ...

  2. 算法题3 二分查找法

    快速查找:二分查找法 有序数字:3,5,8,10,14,18,19,20,34,58 package com.interview;public class BinarySearch {public s ...

  3. 算法2(二分查找法)

    使用二分查找法的前置条件 必须是一个已经排好序的数组 二分查找定义 从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半. 示例图 循环版二分查找法 d ...

  4. 【C++】C++11 STL算法(四):二分查找法(Binary search operations)、合并操作

    目录 一.lower_bound 1.原型: 2.说明: 3.官方demo 二.upper_bound 1.原型: 2.说明: 3.官方demo 三.binary_search 1.原型: 2.说明: ...

  5. python 二分查找算法_Python实现二分查找法

    用Python来实现二分查找 1.问题需求 输入列表[1,4,4,5,7,7,8,9,9,10]和目标整数1,输出其所在的位置为0,即第1次出现在第0个位置.输入列表[1,2,3,3,4,5,10]和 ...

  6. 【javascript算法】二分查找法

    目录 1.二分查找算法 1.1定义 1.2流程图 1.3查找过程 2.javascript的实现 2.1 源码 2.2测试结果 2.3拓展题 1.二分查找算法 本文是根据有序数组升序的顺序来实现的 1 ...

  7. 数据结构 | 折半查找 /二分查找 算法细节、二分查找判定树

    一.基本思想 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步 ...

  8. 经典算法之左边界二分查找法(俗称左边界二分搜索法)

    经典算法之左边界二分查找法(俗称左边界二分搜索法) 文章目录 经典算法之左边界二分查找法(俗称左边界二分搜索法) 前言 一.什么左边界二分查找法? 二.代码实现 总结 前言 就算法而言,我们主要学习的 ...

  9. 经典算法之右边界二分查找法(俗称基本右边界二分搜索法)

    经典算法之右边界二分查找法(俗称基本右边界二分搜索法) 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 经典算法之右边界二分查找法(俗称基本右边界二分搜索法) 前言 一.什 ...

最新文章

  1. PNAS顶刊文:情侣分手3个月前就有预兆!聊天记录还能反映分手后遗症
  2. Redis实现广告缓存、并完善缓存击穿
  3. JVM对象分配回收算法
  4. opencv求解AX=0
  5. 02_Flink vs storm vs SparkStreaming、Flink vs storm对比图、实时框架如何选择
  6. Vue.js 笔记之 img src
  7. Jenkins搭建Nodejs自动化测试
  8. 问题 1045: [编程入门]自定义函数之整数处理
  9. [TODO]com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method
  10. Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示
  11. java 面试题分析
  12. 计算机软件基础第四版,《计算机软件技术基础》徐士良(第4版)课后习题答案详解|复习笔记...
  13. D3 Geographies
  14. HTML5开源RPG游戏引擎lufylegendRPG 0.1发布
  15. quartus调用D触发器DFF和JK触发器JKFF
  16. 颠覆大数据分析之Storm简介
  17. 北大青鸟汉字注释机内码_众海常用汉字机内码表
  18. Creator+微信小游戏:(3)微信openID获取(https、wss问题)
  19. TTL和CMOS输出端连接注意
  20. 百度2023校招 内推码IVV4AS

热门文章

  1. 分享:Orthanc 0.4.0 发布,DICOM 服务器
  2. 基于Kubernetes构建现代大数据管道
  3. Google已占据全球搜索市场75.8%份额
  4. 在某些情况下明明添加了引用,为何VS还报错XXX不存在类型或命名空间(是否缺少程序集引用)...
  5. 博客园添加访问次数统计
  6. ubuntu workerman kaer
  7. SystemCenter2012SP1实践(24)【录像】创建私有云
  8. SCVMM2012 SP1 之虚拟机模板的创建
  9. 盛大 牛人 blog
  10. linux下安装expect解决方法