随笔 - 87  文章 - 279  trackbacks - 0
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

潜心看书研究!

常用链接

留言簿(19)

随笔分类(81)

文章分类(89)

相册

ACM OJ

My friends

搜索

  •  

积分与排名

  • 积分 - 214376
  • 排名 - 116

最新评论

阅读排行榜

评论排行榜

当k比较小的时候,可获得O(n)的时间复杂度.

#include  < iostream >
using namespace std;

const   int  arrLen  =   5 ;

void  countingSort( int   * a,  int   * b,  int  k)  {
    
// a数组元素在[0..k]
     int  i, j;
    
int   * =   new   int [k + 1 ];
    
for  (i = 0 ; i <= k; i ++ ) c[i]  =   0 ;
    
for  (i = 0 ; i < arrLen; i ++ ) c[a[i]] ++ ;
    
// 包含小于或等于i的元素个数
     for  (i = 1 ; i <= k; i ++ ) c[i]  +=  c[i - 1 ];
    
for  (j = arrLen - 1 ; j >= 0 ; j -- {
        b[c[a[j]]
- 1 =  a[j];
        c[a[j]]
-- ;
    }

}


int  main()  {
    
int  a[arrLen]  =   { 4 4 3 1 1 } ;
    
int  b[arrLen];
    countingSort(a, b, 
5 );
    
for  ( int  i = 0 ; i < 5 ; i ++ {
        printf(
" %d  " , b[i]);
    }

    printf(
" \n " );
    system(
" pause " );
}

posted on 2007-02-06 20:43 阅读(682) 评论(2)  编辑 收藏 引用 所属分类: 算法&ACM

FeedBack:
# re: >笔记2 -- 计数排序 2007-02-08 10:41 Dain
mit的金典牛书
你看得是英文版还是中文版阿  回复  更多评论
  
# re: >笔记2 -- 计数排序[未登录] 2007-02-08 18:45 
中英一起来:)  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理