计数排序

计数排序
k为数组a中最大值,n为数组a的长度。
countSort用于对整型数组排序,时间复杂度为O(k+n)。
当k = O(n)时,时间复杂度变为O(n)。
c[i]记录a数组中数值大于或等于i的个数
int  countSort( int   *  a,  int  k,  int  n)
{
    
int  i;
    
int   *  c  =   new   int  [k + 1 ],  *  b  =   new   int  [n];
    
for (i  =   0 ; i  <=  k; i ++ )
        c[i] 
=   0 ;
    
for (i  =   0 ; i  <  n; i ++ )
        c[a[i]]
++ ;
    
for (i  =   1 ; i  <=  k; i ++ )
        c[i] 
+=  c[i - 1 ];
    
for (i  =  n  -   1 ; i  >=   0 ; i -- )
    {
        b[c[a[i]]
- 1 =  a[i];
        c[a[i]]
-- ;
    }
    
for (i  =   0 ; i  <  n; i ++ )
        a[i] 
=  b[i];
    delete [] b;
    delete [] c;
    
return   0 ;
}

你可能感兴趣的:(计数排序)