/*    问题描述:某公司有几万名员工, 请完成一个时间复杂度为O(n)的算法对该公司员工的年龄做排序, 要             求空间复杂度为O(1)

    问题分析:因为人的年龄总共也不会超过100岁,所以可以创建一个大小为100的辅助空间(数组),用于             统计各个年龄的数目,统计后在把辅助空间中对应不为0的index, 插入到对应的待排数组中             即可完成排序.

    算法分析:此类排序的方式称为计数排序(couting sort), 对于任意数组我们必须知道此数组中最大             数字,才能建立辅助空间用于计数,当数组中的Maxer非常大的情况下, 需要建立极为庞大的             辅助数组,此时若数组中只有一个数,我们也要遍历整个辅助数组,那么对于时间来说极为浪             费,因此待排数组中最大的数越小,且越贴近待排容量,算法最优 */#include <stdio.h>

void sort_ages(int ages[], int len){    if(ages == NULL || len < 1)        return ;

    const int max_age = 100;

    int age_counts[max_age + 1];    for(int i = 1; i < max_age + 1; ++i)        age_counts[i] = 0;

    for(int i = 0; i < len; ++i)        // 统计各年龄出现的次数        ++age_counts[ages[i]];

    for(int i = 1, index = 0; i <= max_age; ++i)    {        for(int j = 0; j < age_counts[i]; ++j)        {             ages[index++] = i;        }    }}

int main(){     int ages[] = {33, 66, 77, 45, 33, 100};    sort_ages(ages, 6);    for(int i = 0; i < 6; ++i)        printf("%d ", ages[i]);}   

运行结果: 33 33 45 66 77 100

计数排序的应用与分析相关推荐

  1. java sorted排序_【算法】排序算法之计数排序

    前几回,我们已经对冒泡排序.直接插入排序.希尔排序.选择排序.快速排序.归并排序.堆排序做了说明分析.本回,将对计数排序进行相关说明分析. 一.排序算法系列目录说明 冒泡排序(Bubble Sort) ...

  2. c++ 二维数组 排序_【算法】排序算法之计数排序

    前几回,我们已经对[算法]排序算法之冒泡排序.[算法]排序算法之插入排序.[算法]排序算法之希尔排序.[算法]排序算法之选择排序.[算法]排序算法之快速排序.[算法]排序算法之归并排序.[算法]排序算 ...

  3. 计数排序及其改进 C++代码实现与分析 恋上数据结构笔记

    文章目录 复习梗概 算法思想 基础思想 改进空间复杂度,改进不能对负数进行排序问题 改进稳定性 计数排序时间空间复杂度 计数排序基础版 代码及输出 计数排序第一次改进版 代码及输出 计数排序终极版 代 ...

  4. 【排序算法】计数排序引发的围观风波——一种O(n)的排序

    前言 计算机课上,老师给一串数字6 1 6 9 9 1 4 2 1 5 8 8,问道:这一串数字,你们写个程序给我看,要求效率较高.学不出来的别下课了. 顿时场下一片哗然,但有很多小朋友硬着头皮啪啪啪 ...

  5. 计数排序、桶排序和基数排序的运算性能对比及总结区别(附python代码)

    首先证明一波排序算法的运算性能,如下图.对于50万个数据的无序列表,时间复杂度为的桶排序和计数排序明显比复杂度为的归并排序和快速排序性能好至少一个数量级. 1. 计数排序  1.1 基本原理:首先确定 ...

  6. 算法导论-排序(四)计数排序(线性时间排序)

    目录 1.计数排序介绍 2.流程图 3.代码实现 4.性能分析 5.参考资料 内容 1.计数排序介绍 什么是计数排序? 计数排序是一种特殊的排序算法,之前介绍的排序算法需要对数进行两两比较,效率下界为 ...

  7. 计数排序、桶排序和基数排序

    计数排序 当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k).计数排序不是比较排序,排序的速度快于任何比较排序算法. 由于用来计数的数组C的长度取决于待排序数组中数据的 ...

  8. 经典排序算法(11)——计数排序算法详解

    计数排序(Counting sort)是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出.它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k ...

  9. 排序算法--(冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序)

    一.时间复杂度分析 - **时间复杂度**:对排序数据的总的操作次数.反应当n变化时,操作次数呈现什么规律 - **空间复杂度**:算法在计算机内执行时所需要的存储空间的容量,它也是数据规模n的函数. ...

最新文章

  1. 使用Python,OpenCV进行Tesseract-OCR绑定及识别
  2. websocket探究
  3. Layui中Jquery动态设置的select标签加载时而正常时而失效问题排查和解决
  4. 中国版LinkedIn呼之欲出
  5. 清华大学 lt;现代软件工程gt; 项目小组名单
  6. 要啥网·商信:一款让所有商业活动一步跨入移动互联时代的APP
  7. 关于Linux的close函数的注意点
  8. 间距margin、padding - bootStrap4常用CSS笔记
  9. 高斯克吕格投影,将经纬度转换为投影坐标
  10. x240无线网卡驱动 linux,Linux2.6移植:DM9000驱动
  11. 【论文笔记】Imagenet-trained cnns are Biased towards Texture; Increasing Shape Bias Improves accuracy
  12. 社会学概论试题库【1】
  13. linux文件管理命令ppt,linux命令以及文件管理.ppt
  14. Android WebView使用及苏宁易付宝支付相关问题
  15. java 山寨qq源代码_求一个山寨qq的源代码,要java语言的~谢谢
  16. 矩阵 Hessian
  17. iOS 官方文档翻译
  18. crontab巨坑问题
  19. scrapy源码3:scraper的源码分析
  20. 使用Docker时遇到的坑与解决方法

热门文章

  1. 杂散干扰解决办法_6种直流电源杂散干扰的成因分析及解决办法
  2. fast角点与ShiTomas角点速度对比
  3. .net core/5/6/7中WPF如何优雅的开始开发
  4. 经典机器学习算法的数学推导
  5. ORA-00371: not enough shared pool memory, should be atleast 62198988 bytes
  6. 以太坊智能合约之如何执行智能合约?
  7. 【机器学习】信息论基础(联合熵、条件熵、交叉熵、KL散度等)+ Python代码实现
  8. ISO/IEC 27018 中文版
  9. 使用dom4j生成KML文件
  10. 使用高德地图加在kml文件