第三章:查找与排序(下)----------- 3.19 计数排序

计数排序及其改进 C++代码实现与分析 恋上数据结构笔记 文章目录复习梗概算法思想基础思想改进空间复杂度,改进不能对负数进行排序问题改进稳定性计数排序时间空间复杂度计数排序基础版 代码及输出计数排序第一次改进版 代码及输出计数排序终极版 代码及输出(重要) 复习梗概 基础算法思想? 两种改进的思路?重点在于最终版本思想 最终版本是如何做到稳定的? 三个数组(array,counts,temp)彼此间的索引和元素的对应关系? 算法思想 基础思想 计数排序适合对在一定范围内的整数进行排序 先找到排序数组的最大值,创建一个最大索引是该最大值的计数数组,初始 阅读详情

计数排序 

一句话:用辅助的数组对数组中出现的数字计数,元素转下标,下标转元素。

假设所有元素均大于等于0,依次扫描原数组,将元素值k记录在辅助数组的k位上。

依次扫描辅助数组,如果为1,将其插入目标是数组的空白位处。

问题:

-----重复元素

-----有负数

优点:快;(可以说是最快的排序算法,没有比较,直接映射)

缺点:数据范围很大,比较稀疏,会导致辅助空间很大,也稀疏,造成空间的浪费。

#include<iostream>
using namespace std;

void countSort(int arr[],int length){
	int maxL=arr[0];
	//求原数组元素中的最大值 
	for(int i=1;i<length;i++){
		maxL=max(maxL,arr[i]);
	} 
	
	int helper[maxL+1];
	//辅助数组赋初值为0	
	for(int i=0;i<=maxL;i++){
		helper[i]=0;
	}
	//遍历原数组,元素转下标,若出现,则对应位置元素+1
	for(int i=0;i<length;i++){
		helper[arr[i]]++;
	} 
	
	int current=0;//数据回填的位置
	for(int i=1;i<=maxL;i++){
		while(helper[i]>0){
			arr[current++]=i;  //下标转元素
			helper[i]--; 
		}
	} 
}

int main(){
	int arr[]={6,2,5,8,2,1,9,5,6};
	int len= 9;
	
	countSort(arr,len);
	for(int i=0;i<len;i++){
		cout<<arr[i]<<" ";
	}
	return 0;
} 

时间复杂度:扫描一次source,扫描一次helper,复杂度为N+k;

空间复杂度:辅助空间k,k=maxOf(source);

非原址排序;

如果要优化一下空间,可用求minOf(source),helper的长度为max-min+1,这样能短点;

计数有缺陷,数据较为密集或者范围较小是,适用。

 结果:

NOTICE:

 计数排序,适用数据范围小,且范围已知。

WorkBuddy CAD 审图救命课:约束、单位、尺寸链一次查清,打样前拦住返工 最危险的 CAD 文件不是打不开,而是看起来完整却混用了毫米与英寸、草图欠约束、关键尺寸没有来源。审图任务必须先列规则,再输出问题位置。 本课不会用“AI 一键完成”制造错觉,而是把 WorkBuddy、FreeCAD 0.21.2、OpenCascade 7.7 与人工审阅组成一条可复现链路。你会从“一份模拟 STEP 文件、参数表、装配基准与审图标准”出发,得到“单位报告、约束清单、尺寸链风险表与人工复核标记”,并学会用真实命令、错误信号和停止条件判断成果能不能进入下一阶段。 阅读详情

相关推荐

告别jom Error 2:深入理解QtCreator、CMake与MSVC工具链的协作机制

本文深入解析QtCreator构建过程中常见的jom Error 2问题,揭示CMake与MSVC工具链的协作机制。从CMake生成器的工作原理到MSVC工具链的组件协作,帮助开发者系统化诊断构建错误,提升开发效率。

weixin_30654419的博客 432

计数排序(Counting Sort)

计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 8.1 算法描述 找出待排序的数组中最大和最小的元素; 统计数组中每个值为i的元素出现的次数,存入数组C的第i项; 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加); 反向填充目标数组:将每个元素i放在新...

jenie的专栏 630

Zemax操作40--序列模式中LD光源模拟

LD模拟

lzy750750的博客 9124

python——基础算法(查找与排序)

1、二分查找 # 递归实现二分查找 def binarySearch(arr, left, right, target): if left <= right: mid = int(left + (right - left) / 2) if arr[mid] == target: return mid elif...

优快云的博客 518

通达信波段交易公式实战:如何用副图指标精准捕捉买卖点(附完整源码)

本文深入解析通达信波段交易副图指标的构建与应用,提供完整源码实现,帮助投资者精准捕捉买卖点。通过趋势强度度量、超买超卖判断及信号过滤机制,结合K线图分析,有效提升波段交易的成功率。

weixin_29306317的博客 610

SAP S/4HANA 可扩展性 – 面向初学者的简化指南

可扩展性(Extensibility)是 SAP ECC 和 SAP S/4HANA 的一项关键功能。它使客户能够通过定制其业务流程来创造竞争优势,并使合作伙伴能够通过量身定制的解决方案来丰富核心 ECC 或 S/4HANA。在过去的几十年中,SAP 的 on-premise 版本客户和合作伙伴主要使用经典的 ABAP 扩展性来扩展他们的 ERP 解决方案。经典扩展性允许 ABAP 开发人员使用甚至修改所有 SAP 对象。尽管经典扩展性非常强大和灵活,但在当今的云世界中,它已不再是一个好的选择。

SAP学习成长之路的博客 1809

小白初识 - 计数排序(CountingSort)

计数排序,属于桶排序特殊的一种。 当要排序n个数据的时候,如果所处的范围不大,我们可以取其中的最大值K,并将数据分散在K个桶里面, 每个桶里面的数据都是相同的(这样省去了桶内排序的时间),然后顺序取出就好啦。 当然计数排序说起来简单,写起来有些地方不好理解。 比如我们现在有2,5,3,0,2,3,0,3这8个数,要对它排序,我们就可以先取到它的最大值5,然后确定范围在0-5...

antiling9663的博客 149

基于多智能体深度强化学习的空地协同通信系统轨迹设计与访问控制

所属子方向: UAV assisted communication 名词注释 coordinated:协调、协同 base stations 基站,公用移动通信基站,是移动设备接入互联网的接口设备,是指在一定的无线电覆盖区中,通过移动通信交换中心,与移动电话终端之间进行信息传递的无线电收发信电台。 UAV-BS:无人机基站 cooperative-competitive game:合作竞争博弈 throughput :吞吐量,每秒比特数 bps,bits per second Determinis

skysys的研究小屋 4969

task5 排序搜索计数及集合操作

学习目标: task5 排序搜索计数及集合操作 学习产出: 排序,搜索和计数 排序 numpy.sort() numpy.sort(a[, axis=-1, kind='quicksort', order=None]) Return a sorted copy of an array. axis:排序沿数组的(轴)方向,0表示按行,1表示按列,None表示展开来排序,默认为-1,表示沿最后的轴排序。 kind:排序的算法,提供了快排’quicksort’、混排’mergesort’、堆排’heapso

sbjmf的博客 458

GCdepth散点图绘制

基因组组装完成后,需要对组装结果进行评估,其中GC_depth图是一个比较重要的指标,改图的横坐标是GC含量,纵坐标是平均深度。以30k为窗口(window)无overlap计算其GC含量和平均深度。如果存在样品污染,通常能够从GC含量分析中呈现出来。下文探索了几种绘制GC_depth散点图的方法思路。

huangliangbo的专栏 8993

beegfs源码分析

BeeGFS的客户端是由一个内核模块和两个系统服务组成的,这里咱们主要分析内核模块。由于BeeGFS的目录树解析,是在父目录DEntry里找子目录或文件DEntry,逐级迭代完成的,所以在Mount文件系统时,须要从管理节点获取根元数据节点的ID,而后再向根元数据节点查询根目录的DEntry的信息,为后续的目录解析打下基础。获取类似/data/beeond/data/dentries/38/51/root/#fSiDs#/文件fileId的父路径。1.1 FileID的生成。Session网络消息。

wfzy的博客 1913

python:numpy排序搜索计数及集合

numpy排序搜索计数及集合排序numpy.sortnumpy.argsort搜索numpy.argmaxnumpy.argminnumppy.nonzeronumpy.wherenumpy.searchsorted计数numpy.count_nonzero集合numpy.uniquenumpy.intersect1dnumpy.union1dsetxor1d 排序 numpy.sort a. axis:排序沿数组的(轴)方向,0表示按行,1表示按列,None表示展开来排序,默认为-1,表示沿后的轴排序。

罐罐罐子的博客 607

openbmc 支持mctp over pcie(三)(支持作为endpoint)

本文介绍了在Intel BHS平台上支持MCTP over PCIe端点开发的调试方法。开发基于CodeConstruct和AspeedTech-BMC的开源项目,将内核驱动改为模块形式以便调试。内容包括DTS配置、驱动模块设置步骤,以及如何将BMC配置为端点设备。调试过程涉及内核模块加载、MCTPD启动、参数设置等关键命令,并展示了路由表、地址和邻居信息的测试结果。该方案仅为实验性工作,需注意停止其他使用/dev/aspeed-mctp0接口的应用。

wit_yuan的专栏 1557

【数据结构与算法-Day 44】线性时间排序的奥秘:一文搞懂计数排序与桶排序

在排序算法的江湖中,快速排序、归并排序等基于比较的算法以其 $O(n \log n)$ 的时间复杂度称霸一方。然而,这个复杂度也如同一个难以逾越的“天花板”。本文将带你探索一个全新的领域——非比较排序,并聚焦于其中的两大核心成员:计数排序 (Counting Sort) 和桶排序 (Bucket Sort)。我们将深入剖析它们如何巧妙地利用数据自身的特性,绕开元素间的两两比较,从而在特定场景下实现惊人的 $O(n)$ 线性时间复杂度。

吴师兄大模型的博客 749

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Python面试算法编程题(一)——查找&排序

参考:https://blog.csdn.net/u012505432/article/details/52071537 一、查找 1、二分法查找 # 实现一个二分查找 # 输入:一个顺序list(必须为有序数列),要查找的值 # 输出: 待查找的元素的位置 def binarySearch(alist, item): first = 0 last = len(alist)...

举世无双的博客 903

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Numpy排序,搜索和计数

Numpy排序,搜索和计数排序搜索计数 排序 搜索 计数

u011830148的博客 363

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

计数排序java,基本算法学习(四)之计数排序(JS)

计数排序首先我们要对计数排序有一个正确的认识,计数排序是用于确定范围的整数的线性时间排序算法,这一句话我们就可以知道计数排序该如何用了.处理数据:确定范围内的整数特点:快(线性时间)其数据如下:最佳情况:T(n) = O(n+k)最差情况:T(n) = O(n+k)平均情况:T(n) = O(n+k)计数排序的步骤如下查找待排序数组中最大和最小的元素统计每个值为i的元素的出现次数对所有计数开始累加...

weixin_34199161的博客 101

排序、搜索和计数

排序,搜索和计数 文章目录排序,搜索和计数排序numpy.sort()numpy.argsort()numpy.lexsort()numpy.partition()numpy.argpartition()搜索numpy.argmax()numpy.argmin()numppy.nonzero()numpy.where()numpy.searchsorted()计数numpy.count_nonzero() 排序 numpy.sort() numpy.sort(a[, axis=-1, kind='quic

qq_43442822的博客 284

软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南

专攻软考高频算法模块!深度解析二分查找的循环不变量设计、堆排序的建堆/下沉实战推演,重点攻克快速排序的partition优化与复杂度陷阱。横向对比九大排序算法(冒泡/选择/插入/希尔/归并/快排/堆排/计数/桶排)的适用场景,通过12组动画图解揭示堆调整、递归树分裂等核心过程,提炼「哈希冲突避坑指南」「手撕堆排序三步法」「快排最优轴点选择」等硬核技巧,配套20道真题逆向拆解,助考生7天吃透算法模块的45%分值权重,构建从原理推导到考场秒杀的完整知识闭环!

Varin 911

【Numpy学习13】排序,搜索和计数

1.排序 NumPy 提供了多种排序的方法。 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性。 下表显示了三种排序算法的比较: 种类 速度 最坏情况 工作空间 稳定性 ‘quicksort’(快速排序) 1 O(n^2) 0 否 ‘mergesort’(归并排序) 2 O(n*log(n)) ~n/2 是 ‘heapsort’(堆排序) 3 O(n*log(n)) 0 否 1)numpy.sort() 参数说明: a

Xiao_Spring的博客 896

numpy task5排序搜索计数及集合操作

排序,搜索和计数 排序 numpy.sort(a[, axis=-1, kind=‘quicksort’, order=None]); axis:排序沿数组的轴方向; kind:排序的算法(快排,混排,堆排); order:排序的字段名 import numpy as np # np.random.seed() x= np.random.rand(5,5)*10 x = np.around(x,2) print(x) print('+++++++++++') y = np.sort(x) pri

BigCabbageFy的博客 524

二分查找的变形,统计数字在排序数组出现的次数

当在排序数组中查找数字时,首选的方法为二分查找法 1 class Solution { 2 public: 3 int GetFirstK(vector<int>data,int k,int start,int end) 4 { 5 if(start>end) 6 return ...

diaorou9470的博客 118

排序和查找-线性排序算法和查找特定值

一、排序算法的时间下界 常用排序算法中的冒泡排序、选择排序、插入排序等排序算法都是基于比较的。对于基于比较的排序算法,其时间下界为Ω(nlgn). 用决策树模型可以证明该结论。基于比较的排序算法的每一次排序都可以看做是一次决策,决策的结果是比较的两个值是大于或者小于等于。考虑三个元素的排序,以下标表示每个元素,我们可以构造如下的决策树: 图中的每个非页节点表示要比较的两个元素的下标,

浩海拾贝 2731

牛客面试必刷TOP101——二分查找排序

列表[二分查找-I BM17][二维数组中的查找 BM18][寻找峰值 BM19][组中的逆序对 BM20 ][旋转数组的最小数字 BM21][比较版本号 BM22] [二分查找-I BM17] 原题 请实现无重复数字的升序数组的二分查找。给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1 class Solution: def search(self , num

weixin_42486554的博客 1667

【排序算法】数据结构排序详解

排序算法的实现

m0_56069910的博客 1680

数据结构与算法19—排序

排序 排序是日常工作和软件设计中常用的运算之一。为了提高查询速度需要将无序序列按照一定的顺序组织成有序序列。 排序的主要目的就是实现快速查找。 排序分类 增排序和减排序:如果排序的结果是按关键字从小到大的次序排列的,就是增排序,否则就是减排序。 稳定排序和不稳定排序:具有相同关键字的记录,经过排序后它们的相对次序仍然保持不变,则称这种排序方法是稳定的;反之是不稳定的。 内部排...

weixin_30699465的博客 509
上一篇: 第三章:查找与排序(下)----------- 3.16堆的概念及堆排序思路
下一篇: 第三章:查找与排序(下)----------- 3.20桶排序
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值