十大经典排序算法系列博客——>传送门


计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。

算法步骤:

  • 找出待排序的数组中最大和最小的元素;

  • 统计数组中每个值为i的元素出现的次数,存入数组C的第i项;

  • 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);

  • 反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1。


代码展示

#include <iostream>
#include <vector>
using namespace std;void CountSort(vector<int> &arr, int maxVal) {int len = arr.size();if (len < 1)return;vector<int> count(maxVal+1, 0);vector<int> tmp(arr);for (auto x : arr)count[x]++;for (int i = 1; i <= maxVal; ++i)count[i] += count[i - 1];for (int i = len - 1; i >= 0; --i) {arr[count[tmp[i]] - 1] = tmp[i];count[tmp[i]]--;               //注意这里要减1}
}int main()
{vector<int> arr = { 1,5,3,7,6,2,8,9,4,3,3 };int maxVal = 9;CountSort(arr,maxVal);for (auto x : arr)cout << x << " ";cout << endl;return 0;
}

【GIF动画+完整可运行源代码】C++实现 计数排序——十大经典排序算法之八相关推荐

  1. 【GIF动画+完整可运行源代码】C++实现 基数排序——十大经典排序算法之十

    十大经典排序算法系列博客-->传送门 基数排序是按照低位先排序,然后收集:再按照高位排序,然后再收集:依次类推,直到最高位.有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序.最 ...

  2. 【GIF动画+完整可运行源代码】C++实现 堆排序——十大经典排序算法之七

    十大经典排序算法系列博客-->传送门 堆排序Heapsort是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大 ...

  3. 【GIF动画+完整可运行源代码】C++实现 快速排序——十大经典排序算法之六

    十大经典排序算法系列博客-->传送门 ##### 1.快排的实现逻辑: 先从数列中取出一个数作为基准数(通常取第一个数). 遍历序列,将比它小的数与比它大的数分别记录下来,分为两类,最后该数放在 ...

  4. 【GIF动画+完整可运行源代码】C++实现 归并排序——十大经典排序算法之五

    十大经典排序算法系列博客-->传送门 简介:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,是采用分治法Divide and Conquer的一个非常典型的应用.分Divide: ...

  5. 【GIF动画+完整可运行源代码】C++实现 插入排序——十大经典排序算法之三

    十大经典排序算法系列博客-->传送门 插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法步骤: 从第一个元素开始,该元素认为已经被排序: ...

  6. 【GIF动画+完整可运行源代码】C++实现 冒泡排序——十大经典排序算法之一

    十大经典排序算法系列博客-->传送门 冒泡排序重复地遍历待排序的数列,每次比较两个相邻元素,如果它们的顺序错误就把它们交换.重复地进行遍历直到没有再需要交换时表示数列已经排序完成. 算法步骤: ...

  7. C++实现桶排序——十大经典排序算法之九【GIF动画+完整代码+详细注释】

    十大经典排序算法系列博客-->传送门 桶排序是计数排序的升级版.它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定.桶排序 (Bucket sort)的工作的原理:假设输入数据服从均 ...

  8. 【GIF动画+完整可运行源代码】C++实现 希尔排序——十大经典排序算法之四

    十大经典排序算法系列博客-->传送门 希尔排序由Shell在1959年发明,又叫缩小增量排序,是第一个突破O(n^2)的排序算法,属于简单插入排序的改进版,会优先比较距离较远的元素. 算法步骤: ...

  9. 【GIF动画+完整可运行源代码】C++实现 选择排序——十大经典排序算法之二

    十大经典排序算法系列博客-->传送门 选择排序是一种简单直观的排序算法,首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的 ...

最新文章

  1. MySQL基础之 存储引擎
  2. PHP面试题:合并两个数组有几种方式,试比较它们的异同
  3. Java IO: Reader And Writer
  4. 广工计算机组成原理实验报告_计算机组成原理:存储器
  5. VBScript是什么?有什么优缺点?
  6. xstream java_XStream将java转化成xml的简单使用
  7. EMNLP2021 | 标签推理的细粒度实体识别
  8. 具体数学-第5课(8种方法求和)
  9. 1000瓶毒药里有1瓶有毒,问需要多少只老鼠能试出来哪瓶有毒
  10. 如何产生JIC文件(sof+ELF=jic)
  11. x星球出入站(蓝桥杯递归)
  12. 数据库SQL Server 如何将数据库表名等前缀转换成dbo
  13. 高通平台开发系列讲解(外设篇)TDM配置
  14. SQL必知必会(一)SQL基础篇
  15. 易基因|ChIP-seq技术及其在植物研究领域中的应用
  16. Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezon‘
  17. 恒源云(GPUSHARE)_CV训练时容易忽视的数据标签问题
  18. Centos7——将网卡修改为任意名称
  19. 一部没看过的电影,如何确定是爱情片还是动作片?
  20. java新特性--03--Stream简介

热门文章

  1. Linux下查看系统配置
  2. scrapy框架的概念和流程
  3. 那些年我们一起追过的大佬
  4. OS- -操作系统常见问题总结
  5. 多媒体技术生态未来的三个关键要素
  6. 我在攻读计算机视觉和机器学习硕士学位时学到了什么
  7. 视频会议场景下的弱网优化
  8. 基于WebRTC的互动直播实践
  9. Go netpoller 网络模型之源码全面解析
  10. 腾讯在信息流内容理解技术上的解决方案