news 2026/6/9 18:31:20

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

作者头像

张小明

前端开发工程师

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/6/9 17:01:04

PaddlePaddle镜像中的动量(Momentum)优化器调参建议

PaddlePaddle镜像中的动量&#xff08;Momentum&#xff09;优化器调参建议 在深度学习项目中&#xff0c;模型训练的稳定性与收敛速度往往直接决定了研发周期和上线效率。尤其是在工业级场景下&#xff0c;一个看似微小的优化器参数设置不当&#xff0c;可能让原本几天就能完成…

作者头像 李华
网站建设 2026/6/7 6:32:26

新手教程:用Arduino读懂SSD1306中文手册并点亮屏幕

从零读懂SSD1306手册&#xff1a;用Arduino点亮OLED的完整实战指南你有没有试过照着网上的教程接好线、烧录代码&#xff0c;结果屏幕就是不亮&#xff1f;或者显示的内容上下颠倒、模糊不清&#xff0c;却不知道问题出在哪&#xff1f;如果你正在用Arduino驱动一块小小的OLED屏…

作者头像 李华
网站建设 2026/6/7 12:07:11

提高效率:Arduino IDE为ESP32定制编译选项的完整示例

如何用platform.local.txt深度定制 ESP32 编译流程&#xff1f;实战指南你有没有遇到过这样的情况&#xff1a;写完一个功能丰富的 Arduino 项目&#xff0c;点击“上传”&#xff0c;结果 IDE 弹出错误&#xff1a;“固件太大&#xff0c;无法烧录&#xff01;”或者你想用std…

作者头像 李华
网站建设 2026/6/9 17:28:28

PaddlePaddle镜像中的标签平滑(Label Smoothing)作用解析

PaddlePaddle中的标签平滑&#xff1a;从原理到工业实践 在现代深度学习训练中&#xff0c;一个看似微小的技巧——将真实类别标签从“1.0”轻轻往下调一点&#xff0c;竟然能显著提升模型在线上环境的真实表现。这听起来有些反直觉&#xff1a;我们教模型识别猫的时候&#xf…

作者头像 李华
网站建设 2026/6/7 12:36:03

Windows桌面美化终极指南:TranslucentTB任务栏透明完全教程

Windows桌面美化终极指南&#xff1a;TranslucentTB任务栏透明完全教程 【免费下载链接】TranslucentTB 项目地址: https://gitcode.com/gh_mirrors/tra/TranslucentTB 你是否厌倦了Windows系统千篇一律的灰色任务栏&#xff1f;想要让桌面焕然一新却不知从何入手&…

作者头像 李华
网站建设 2026/6/9 17:21:52

DDR4基础扫盲

Write Leveling&#xff08;写均衡&#xff09;为了解决高速数据传输时时钟和数据信号不同步的问题&#xff0c;确保数据能被准确采样。它的核心原理是PHY通过动态调整数据选通信号&#xff08;DQS&#xff09;的相位&#xff0c;使其与时钟信号&#xff08;CK&#xff09;的上…

作者头像 李华