【GIF动画+完整可运行源代码】C++实现 计数排序——十大经典排序算法之八
十大经典排序算法系列博客——>传送门
计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。
找出待排序的数组中最大和最小的元素;
统计数组中每个值为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++实现 计数排序——十大经典排序算法之八相关推荐
- 【GIF动画+完整可运行源代码】C++实现 基数排序——十大经典排序算法之十
十大经典排序算法系列博客-->传送门 基数排序是按照低位先排序,然后收集:再按照高位排序,然后再收集:依次类推,直到最高位.有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序.最 ...
- 【GIF动画+完整可运行源代码】C++实现 堆排序——十大经典排序算法之七
十大经典排序算法系列博客-->传送门 堆排序Heapsort是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大 ...
- 【GIF动画+完整可运行源代码】C++实现 快速排序——十大经典排序算法之六
十大经典排序算法系列博客-->传送门 ##### 1.快排的实现逻辑: 先从数列中取出一个数作为基准数(通常取第一个数). 遍历序列,将比它小的数与比它大的数分别记录下来,分为两类,最后该数放在 ...
- 【GIF动画+完整可运行源代码】C++实现 归并排序——十大经典排序算法之五
十大经典排序算法系列博客-->传送门 简介:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,是采用分治法Divide and Conquer的一个非常典型的应用.分Divide: ...
- 【GIF动画+完整可运行源代码】C++实现 插入排序——十大经典排序算法之三
十大经典排序算法系列博客-->传送门 插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法步骤: 从第一个元素开始,该元素认为已经被排序: ...
- 【GIF动画+完整可运行源代码】C++实现 冒泡排序——十大经典排序算法之一
十大经典排序算法系列博客-->传送门 冒泡排序重复地遍历待排序的数列,每次比较两个相邻元素,如果它们的顺序错误就把它们交换.重复地进行遍历直到没有再需要交换时表示数列已经排序完成. 算法步骤: ...
- C++实现桶排序——十大经典排序算法之九【GIF动画+完整代码+详细注释】
十大经典排序算法系列博客-->传送门 桶排序是计数排序的升级版.它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定.桶排序 (Bucket sort)的工作的原理:假设输入数据服从均 ...
- 【GIF动画+完整可运行源代码】C++实现 希尔排序——十大经典排序算法之四
十大经典排序算法系列博客-->传送门 希尔排序由Shell在1959年发明,又叫缩小增量排序,是第一个突破O(n^2)的排序算法,属于简单插入排序的改进版,会优先比较距离较远的元素. 算法步骤: ...
- 【GIF动画+完整可运行源代码】C++实现 选择排序——十大经典排序算法之二
十大经典排序算法系列博客-->传送门 选择排序是一种简单直观的排序算法,首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的 ...
最新文章
- MySQL基础之 存储引擎
- PHP面试题:合并两个数组有几种方式,试比较它们的异同
- Java IO: Reader And Writer
- 广工计算机组成原理实验报告_计算机组成原理:存储器
- VBScript是什么?有什么优缺点?
- xstream java_XStream将java转化成xml的简单使用
- EMNLP2021 | 标签推理的细粒度实体识别
- 具体数学-第5课(8种方法求和)
- 1000瓶毒药里有1瓶有毒,问需要多少只老鼠能试出来哪瓶有毒
- 如何产生JIC文件(sof+ELF=jic)
- x星球出入站(蓝桥杯递归)
- 数据库SQL Server 如何将数据库表名等前缀转换成dbo
- 高通平台开发系列讲解(外设篇)TDM配置
- SQL必知必会(一)SQL基础篇
- 易基因|ChIP-seq技术及其在植物研究领域中的应用
- Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezon‘
- 恒源云(GPUSHARE)_CV训练时容易忽视的数据标签问题
- Centos7——将网卡修改为任意名称
- 一部没看过的电影,如何确定是爱情片还是动作片?
- java新特性--03--Stream简介