计数排序 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