首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一道算法分析题目,关于时间复杂度的

2012-02-29 
求助一道算法分析题目,关于时间复杂度的已知n个互不相同的正整数Si,1 i n,1 Si n问是否存在一个排

求助一道算法分析题目,关于时间复杂度的
已知n个互不相同的正整数Si,1 <=i <=n,1 <=Si <=n

问是否存在一个排序算法,使得时间复杂度为O(n)

以下是我的算法,我认识是有的

void   insert(int   S[i],int   Q[n])

//S[i]是要排序的数组,Q[n]是一个有n个元素的数组

{

    int   k,m;

    m=0;

    for(k=0;k <n;k++)

      Q[k]=0;

    for(k=0;k <i;k++)

      Q[S[k]]=1;

    for(k=0;k <n;k++)

    {

    if(Q[k]==1){

      S[m]=k;

      m++;

}

我不知道对不对,我的想法是这样的

比如n=10;要排序的数组为S[4]={7,3,8,2}

这样得到一个数组Q[10]={0,0,1,1,0,0,0,1,1,0}



[解决办法]
对呀,这就是著名的桶排序,优点是时间复杂度为o(n),缺点是必须要求数的范围比较小,如果数的范围很大的话,就必须开很大的数组。

热点排行