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));
javascript数据结构与算法---检索算法(二分查找法、计算重复次数)相关推荐
- 算法(一):二分查找法
算法基础: 一.大O表示法: 指示算法的速度有多快,用于指出随数量的增大,算法的所需步骤增加的速度,常见的大O运行时间(时间复杂度): O(1)表示常数阶时间复杂度 O(log n),也叫对数时间复杂 ...
- 算法题3 二分查找法
快速查找:二分查找法 有序数字:3,5,8,10,14,18,19,20,34,58 package com.interview;public class BinarySearch {public s ...
- 算法2(二分查找法)
使用二分查找法的前置条件 必须是一个已经排好序的数组 二分查找定义 从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半. 示例图 循环版二分查找法 d ...
- 【C++】C++11 STL算法(四):二分查找法(Binary search operations)、合并操作
目录 一.lower_bound 1.原型: 2.说明: 3.官方demo 二.upper_bound 1.原型: 2.说明: 3.官方demo 三.binary_search 1.原型: 2.说明: ...
- 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]和 ...
- 【javascript算法】二分查找法
目录 1.二分查找算法 1.1定义 1.2流程图 1.3查找过程 2.javascript的实现 2.1 源码 2.2测试结果 2.3拓展题 1.二分查找算法 本文是根据有序数组升序的顺序来实现的 1 ...
- 数据结构 | 折半查找 /二分查找 算法细节、二分查找判定树
一.基本思想 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步 ...
- 经典算法之左边界二分查找法(俗称左边界二分搜索法)
经典算法之左边界二分查找法(俗称左边界二分搜索法) 文章目录 经典算法之左边界二分查找法(俗称左边界二分搜索法) 前言 一.什么左边界二分查找法? 二.代码实现 总结 前言 就算法而言,我们主要学习的 ...
- 经典算法之右边界二分查找法(俗称基本右边界二分搜索法)
经典算法之右边界二分查找法(俗称基本右边界二分搜索法) 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 经典算法之右边界二分查找法(俗称基本右边界二分搜索法) 前言 一.什 ...
最新文章
- PNAS顶刊文:情侣分手3个月前就有预兆!聊天记录还能反映分手后遗症
- Redis实现广告缓存、并完善缓存击穿
- JVM对象分配回收算法
- opencv求解AX=0
- 02_Flink vs storm vs SparkStreaming、Flink vs storm对比图、实时框架如何选择
- Vue.js 笔记之 img src
- Jenkins搭建Nodejs自动化测试
- 问题 1045: [编程入门]自定义函数之整数处理
- [TODO]com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method
- Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示
- java 面试题分析
- 计算机软件基础第四版,《计算机软件技术基础》徐士良(第4版)课后习题答案详解|复习笔记...
- D3 Geographies
- HTML5开源RPG游戏引擎lufylegendRPG 0.1发布
- quartus调用D触发器DFF和JK触发器JKFF
- 颠覆大数据分析之Storm简介
- 北大青鸟汉字注释机内码_众海常用汉字机内码表
- Creator+微信小游戏:(3)微信openID获取(https、wss问题)
- TTL和CMOS输出端连接注意
- 百度2023校招 内推码IVV4AS
热门文章
- 分享:Orthanc 0.4.0 发布,DICOM 服务器
- 基于Kubernetes构建现代大数据管道
- Google已占据全球搜索市场75.8%份额
- 在某些情况下明明添加了引用,为何VS还报错XXX不存在类型或命名空间(是否缺少程序集引用)...
- 博客园添加访问次数统计
- ubuntu workerman kaer
- SystemCenter2012SP1实践(24)【录像】创建私有云
- SCVMM2012 SP1 之虚拟机模板的创建
- 盛大 牛人 blog
- linux下安装expect解决方法