news 2026/8/22 15:12:28

记数排序(基数排序和桶排序)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
记数排序(基数排序和桶排序)
1、记数排序
概念

简述:将整个数组中的各个数据的个数数出来,然后讲这些数据重新填入原数组中

将要排序的数组先遍历一遍,选出最大的和最小的,以max-min+1(左闭右闭区间)为范围range

intmin=arr[0],max=arr[0];//这里很巧妙,以arr[0]作为min和max,可以解决排序负数的问题for(inti=0;i<n;i++){if(arr[i]>max)max=arr[i];if(arr[i]<min)min=arr[i];}

以range为数组大小开一个数组count,将数组中的数据全都初始化为0,

这里存在一个问题:我们难道要将0到max的值全部开出来吗

答:不是,我们采用“相对值”的方法(即将数据储存在相对于最小值的位置)

intrange=max-min+1;int*count=(int*)calloc(range,sizeof(int));//nullptr判断if(nullptr==count){perror("calloc fail");}

我们再将原数组中的数据中的每个数据的个数统计出来

for(inti=0;i<n;i++){count[arr[i]-min]++;}

然后将count中的数依次填入原数组

intj=0;for(inti=0;i<range;i++){while(count[i]-->0){arr[j++]=i+min;}}
实现:
voidCountSort(int*arr,intn){intmin=arr[0],max=arr[0];//这里很巧妙,以arr[0]作为min和max,可以解决排序负数的问题for(inti=0;i<n;i++){if(arr[i]>max)max=arr[i];if(arr[i]<min)min=arr[i];}intrange=max-min+1;int*count=(int*)calloc(range,sizeof(int));if(nullptr==count){perror("calloc fail");return;}for(inti=0;i<n;i++){count[arr[i]-min]++;}intj=0;for(inti=0;i<range;i++){while(count[i]-->0){arr[j++]=i+min;}}}
分析:

时间复杂度:O(N+range)

空间复杂度:O(range)

这使得记数排序适合排序数的大小范围较集中的数据

(当然,数据量足够大的时候这个方面的影响会减弱)

2、基数排序

太废了,不做进一步了解

3、桶排序

太废了,不做进一步了解
在这里插入图片描述

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/13 5:30:19

PaddlePaddle镜像中的LayerNorm与BatchNorm区别与选用

PaddlePaddle中LayerNorm与BatchNorm的差异与选型实践 在深度学习的实际开发中&#xff0c;一个看似微小的设计选择——比如用哪个归一化层——往往能决定模型能否稳定收敛、训练速度是否达标&#xff0c;甚至影响最终部署效率。尤其是在使用像 PaddlePaddle 这样功能完备的国…

作者头像 李华
网站建设 2026/8/7 14:41:10

Poppler Windows版:PDF处理神器全面解析与实战指南

Poppler Windows版&#xff1a;PDF处理神器全面解析与实战指南 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 还在为PDF文档的各种处理需求发愁吗…

作者头像 李华
网站建设 2026/8/18 10:47:06

树莓派5引脚定义实战入门:点亮第一个LED操作指南

树莓派5点亮第一颗LED&#xff1a;从引脚定义到实战控制你有没有想过&#xff0c;让一块小小的电路板“睁开眼睛”&#xff1f;在嵌入式世界里&#xff0c;点亮一颗LED就像是程序员的“Hello, World!”——简单却意义非凡。它不仅是硬件入门的第一步&#xff0c;更是理解计算机…

作者头像 李华
网站建设 2026/8/18 20:25:09

PaddlePaddle镜像支持增量学习吗?持续训练方案探讨

PaddlePaddle镜像支持增量学习吗&#xff1f;持续训练方案探讨 在今天的AI系统中&#xff0c;模型一旦上线就“一成不变”的时代早已过去。现实业务中的数据每天都在增长——用户行为不断演化、商品种类持续扩充、语音和图像内容日新月异。如果模型不能随之进化&#xff0c;它…

作者头像 李华
网站建设 2026/8/21 12:25:41

如何3步解锁付费内容:面向普通用户的完整访问指南

如何3步解锁付费内容&#xff1a;面向普通用户的完整访问指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 还在为心仪的文章被付费墙阻挡而烦恼吗&#xff1f;当你点击一篇深度报道…

作者头像 李华
网站建设 2026/8/22 12:51:18

一文说清espidf下载与ESP32-C3的兼容性问题

搞定 ESP32-C3 固件烧录&#xff1a;从 espidf 下载失败到一键部署的实战指南 你有没有遇到过这样的场景&#xff1f; 明明代码写得没问题&#xff0c; idf.py build 也顺利通过了&#xff0c;可一执行 idf.py flash &#xff0c;终端就弹出一句冰冷的报错&#xff1a; …

作者头像 李华