排序 | 计数排序

Posted YOUCRY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序 | 计数排序相关的知识,希望对你有一定的参考价值。

1.描述


计数排序是一个非基于比较的 排序算法 ,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(n*log(n))


示例 1

输入:arr = [8,7,6,5,4,3,2,1]

输出:[1,2,3,4,5,6,7,8]

排序 | 计数排序


排序 | 计数排序


2.想法


计数排序时间复杂度均为O( n+k ) 。空间复杂度为 O(k)。
计数排序为不稳定的排序算法。
排序 | 计数排序
排序 | 计数排序


3.代码


排序 | 计数排序
class Solution {public: void countSort(vector<int>& arr,int maxValue){ //假设元素范围在0-maxValue之间 负数可通过偏移量转换(移位) vector<int> count(maxValue+1,0); for(int i=0;i<arr.size();i++){ count[arr[i]]++; } int k=0; for(int i=0;i<count.size();i++){ for(int j=0;j<count[i];j++){ arr[k++]=i; } }  }};






END







关注我们

https://leetcode-cn.com/u/cdxx/
ALWAYS HERE



以上是关于排序 | 计数排序的主要内容,如果未能解决你的问题,请参考以下文章

计数排序及其时间复杂度代码(C++实现)应用场景

计数排序代码

算法-java代码实现计数排序

计数排序Java代码实现

计数排序再思考——从2020年1月第16题谈起

桶排序和计数排序