计数排序是一种非基于比较的稳定的排序算法。在一定条件下,运行时间为O(n)。
基本思想:对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数(此处并非比较各元素的大小,而是通过对元素值的计数和计数值的累加来确定),之后将x直接存放在最终的位置上
条件:
1、n个输入元素中的每一个都是在0到k区间内的一个整数;
2、k=O(n)。
伪代码:
COUNTING-SORT(A,B,k) //输入数组为A[1...n], 输出数组为B[1...n], C[0...k]提供临时存储空间
1 for i=0 to k
2 C[i]=0
3 for j=1 to A.length //最后得到 C[i]记录的是A[1...n]中等于i的元素的个数
4 C[A[j]]=C[A[j]]+1
5 for i=1 to k //最后得到 C[i]记录的是A[1..n]中小于或等于i的元素的个数
6 C[i]=C[i]+C[i-1]
7 for j=A.length downto 1
8 B[C[A[j]]]=A[j]
9 C[A[j]]=C[A[j]]-1