恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

数据结构:非比较排序:计数排序

  • 首页
  • 资讯中心
  • /
  • 数据结构:非比较排序:计数排序

相关资讯

关店前最后一晚,我把验证码全部过了一遍 2026/9/6 5:47:05
FANUC机器人CC-Link从站与三菱PLC主站通信配置与故障排查指南 2026/9/6 5:42:05
双曲线方程全解析:从几何定义到标准方程推导与应用 2026/9/6 5:42:05

最新资讯

第23章:Celery 结果后端进阶与任务血缘
ABot-World-0:当一块 RTX 5090 能编织无限世界——交互式世界模型的高德解法
OPC一人公司的品牌建设:个人IP还是产品品牌?
AIGC检测入口有哪些?论文初稿、修改稿和定稿分别什么时候测?
年度GEO供应商十强怎么选才不踩坑:头部GEO机构硬核实测横评与企业选型避坑指南
从“黑八奇迹”到赛事观察:电竞内容生产的系统化拆解

今日推荐

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

数据结构:非比较排序:计数排序

发布时间:2026/9/6 5:47:05
数据结构:非比较排序:计数排序 前面我们介绍的冒泡、选择、插入、归并、快排等排序算法本质上都属于比较排序——它们通过元素之间的两两比较来决定先后顺序。本篇我将带大家认识一种另辟蹊径的非比较排序算法——计数排序(Counting Sort)它不靠比较而是借助数组下标直接定位元素位置在特定场景下能达到线性时间复杂度。计数排序计数原理又称为鸽巢原理, 是对哈希直接定址法的变形应用. 操作步骤如下:统计相同元素出现次数根据统计的结果将序列回收到原来的序列中思路比如说有以下数组:我们统计每个元素出现的次数, 并将出现次数作为数据放到相应下标中.我们可以看到, 2出现了两次, 所以把2放在下标为2的地方, 3出现了两次, 把3放到下标为3的位置, 4出现了一次, 把1放到下标为4的位置, 6出现了三次, 把3放到下标6的位置, 而其他数字出现次数为0, 所以都放0.也就是说, 我们的数据变成了数组下标, 而相同数据出现次数变成了数据.我们再遍历新数组, 将它还原成一个有序数组.数据为0则往下遍历到下标为2的地方数据不为0则把下标还原为数据放回原数组中数据自减直到为0再去遍历下一个数据并把下标还原回来。思路很简单也可以说是间接利用了数组下标本来就是有序的这一特性很轻松地就把数组排序好了。但是存在一些场景问题。比如说我的数据是{102,103,101,102,103}。数据都比较大且分布集中开辟104个整型空间显然不合理其中101个空间数据都为0白白浪费掉了。我们可以先遍历一遍原数组找到最小值min和最大值max。我们实际存放数据的数组下标就是min到max范围之间我们只需要开辟max-min1个空间就好了将这块空间命名为count。我们如何放呢遍历一遍原数组用数据减去min得到下标让count数组中相应下标中的数据也就是统计原数据出现次数。统计完成后我们再还原回数组就好了。因为我们的下标是原数据减min得到的所以我们还原回去要把min加上。这样就排序好了。代码实现思路很简单我们来实现一下代码先遍历一遍原数组得到最大值和最小值。然后开辟大小为 max - min 1 的空间.这里不用 calloc 函数, 先用 malloc 函数然后用 memset 函数将 count 数组中的数据全设置为 0 也是可以的.然后我们遍历一遍数组, 数据减 min 等于 count 数组中哪个下标, 哪个下标数据就, 也就是 count[arr[i] - min]统计完之后我们把数据还原回数组. 需要遍历一遍 count 数组.代码就完成了.我们简单测试一下:结果符合预期代码没什么问题。时间复杂度可以发现计数排序时间效率很高虽然有嵌套循环但实际上时间复杂度为O(n)。但对于最大值和最小值相差很大的情况无可避免地会浪费掉大量空间所以该排序的适用场景也很有限。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号