当前位置: 首页 > news >正文

数据结构:计数排序(详解)

思路详解:

1 找到数组中的最大值、最小值

2 开辟一个统计每个数据出现次数的数组(总个数是最大值-最小值+1,因为下标范围是0~最大值-最小值,闭区间统计个数要+1)

3 遇到一个元素,在此元素-最小值作为下标的空间处++,统计次数

4 遍历计数数组,不为空,则数值是几就写入几次 下标+最小值到原数组

代码实现:

void CountSort(int* a, int n)
{int i = 0;int min = a[0];int max = a[0];for (i = 0; i < n; i++)//找最大值、最小值{if (a[i] < min){min = a[i];}if (a[i] > max){max = a[i];}}int range = max-min + 1;int* tmp = (int*)malloc(sizeof(int) * range);memset(tmp, 0, sizeof(int) * range);//初始化数组内容全部为0,方便统计,否则是随机值for (i = 0; i < n; i++)//统计数据出现次数{tmp[a[i] - min]++;}int k = 0;for (i = 0; i < range; i++)//根据数据出现次数,从下标0开始写入原数组{while (tmp[i]--){a[k++] = i + min;}}
}

完结撒花~

http://www.lryc.cn/news/97135.html

相关文章:

  • 1 请使用js、css、html技术实现以下页面,表格内容根据查询条件动态变化。
  • react-native项目安卓版本升级 compileSdkVersion 29->31
  • 【学习笔记】目标跟踪领域SOTA方法比较
  • 机器学习 深度学习编程笔记
  • 18.背景轮播
  • 论文代码学习—HiFi-GAN(2)——鉴别器discriminator代码
  • Linux Shell 脚本编程学习之【第3章 正则表达式 (第二部分) grep命令】
  • 大语言模型LLM
  • 自学网络安全(黑客)的误区
  • @Conditional
  • 【Linux】网络基础之TCP协议
  • Java设计模式之装饰器(Decorator)模式
  • element ui树组件render-content 树节点的内容区的渲染另一种方式
  • html a标签换行显示
  • 关于Redis-存Long取Integer类型转换错误的问题
  • 设计模式一:简单工厂模式(Simple Factory Pattern)
  • 如何利用plotly和geopandas根据美国邮政编码(Zip-Code)绘制美国地图
  • ceph集群搭建
  • 前端密码加密 —— bcrypt、MD5、SHA-256、盐
  • 汽车UDS诊断深度学习专栏
  • macOS 下安装brew、nvm
  • 【云原生】Kubernetes工作负载-StatefulSet
  • Java:方法的重载
  • 7.react useCallback与useMemo函数使用与常见问题
  • Sentinel限流中间件
  • 使用ajax进行前后端交互的方法
  • 动手学深度学习——线性回归从零开始
  • Redis缓存击穿
  • 网络安全(黑客)自学的一些建议
  • 全志F1C200S嵌入式驱动开发(基于usb otg的spi-nor镜像烧入)