计数排序 Warning 本页面要介绍的不是 基数排序 。
本页面将简要介绍计数排序。
简介 计数排序(英语:Counting sort)是一种线性时间的排序算法。
工作原理 计数排序的工作原理是使用一个额外的数组 ,其中第 个元素是待排序数组 中值等于 的元素的个数,然后根据数组 来将 中的元素排到正确的位置。
它的工作过程分为三个步骤:
计算每个数出现了几次; 求出每个数出现次数的 前缀和 ; 利用出现次数的前缀和,从右至左计算每个数的排名。
性质 稳定性 计数排序是一种稳定的排序算法。
时间复杂度 计数排序的时间复杂度为 ,其中 代表待排序数据的值域大小。
代码实现 伪代码 C++ 1
2
3
4
5
6
7
8
9
10
11
12 // C++ Version
const int N = 100010 ;
const int W = 100010 ;
int n , w , a [ N ], cnt [ W ], b [ N ];
void counting_sort () {
memset ( cnt , 0 , sizeof ( cnt ));
for ( int i = 1 ; i <= n ; ++ i ) ++ cnt [ a [ i ]];
for ( int i = 1 ; i <= w ; ++ i ) cnt [ i ] += cnt [ i - 1 ];
for ( int i = n ; i >= 1 ; -- i ) b [ cnt [ a [ i ]] -- ] = a [ i ];
}
Python 1
2
3
4
5
6
7
8
9
10
11
12
13
14 # Python Version
N = W = 100010
n = w = 0
a = b = [ 0 ] * N
cnt = [ 0 ] * W
def counting_sort ():
for i in range ( 1 , n + 1 ):
cnt [ a [ i ]] += 1
for i in range ( 1 , w + 1 ):
cnt [ i ] += cnt [ i - 1 ]
for i in range ( n , 0 , - 1 ):
b [ cnt [ a [ i ]] - 1 ] = a [ i ]
cnt [ a [ i ]] -= 1
参考资料与注释 build 本页面最近更新:2021/11/26 22:05:13 ,更新历史 edit 发现错误?想一起完善? 在 GitHub 上编辑此页! people 本页面贡献者:iamtwz , NachtgeistW , Alisahhh , Enter-tainer , Konano , ksyx , llh721113 , mcendu , ouuan , Xeonacid copyright 本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用