计数排序 实现

计数排序 实现
 from  -> introdution to algorithms

原理简单,稳定性高,有应用条件 即 : n个输入元素都是在0 - k之间的整数,当k = O(n)时, 计数排序的时间为O(n).



#include  < stdio.h >
#include 
< string .h >
const   int  _  =   0x7fffffff ;
int  a[ 100 ], n,  out [ 100 ];
int  c[ 100 ];
int  main(){
    freopen(
" count_sort.in " " r " , stdin);
    freopen(
" count_sort.out " " w " , stdout);
    
int  i, k;
    
while (scanf( " %d " & n)  !=   - 1 ){
        k 
=   - _;
        memset(c, 
0 sizeof (c));
        
for (i  =   0 ; i  <  n; i ++ ){
            scanf(
" %d " & a[i]);
            
if (a[i]  >  k)k  =  a[i];
            c[a[i]]
++ // 初始化<=自己的元素个数为1。
        }
        
for (i  =   1 ; i  <=  k; i ++ )c[i]  +=  c[i  -   1 ]; // c中存放整个数列中小于等于自己的元素的个数。
         for (i  =   0 ; i  <  n; i ++ ){
            
out [c[a[i]]]  =  a[i]; // 放到相应的位置上 比如 有 5个元素小于等于自己(包含自己),那么,这个元素应该排在第五位
            c[a[i]] -- ; // 计数器 - 1
        }
        
for (i  =   1 ; i  <=  n; i ++ )printf( " %d  " out [i]);
        puts(
"" );
    }
    
return   0 ;
}

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