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

对N个人按年纪排队,要求O(n)

2013-08-01 
对N个人按年龄排队,要求O(n)求给出代码哦~template class T , unsigned int max_agevoid Humansort(T *a

对N个人按年龄排队,要求O(n)
求给出代码哦~对N个人按年纪排队,要求O(n)

template <class T , unsigned int max_age>
void Humansort(T *a, size_t size)
{
if(a==NULL 
[解决办法]
size<=1)return;
T *t=new T[max_age];
int i = 0;
int j = 0;
int v =0;
for(i=0;i<max_age;i++){
t[i] = 0;
}
for(i=0;i<size;i++){
t[a[i]]++;
}
for(v=0,j=0,i=0;i<size;i++){
a[i] = t[j]?(t[j]--,v):(--i,++j,++v);
}
delete[] t;
}

[解决办法]
重新修改了一下程序,去掉了年龄相同的限制。
typedef struct humanage{
int age;
int count;
}p_age;
void humansort(int *age,int n)//N个人按年龄排序,要求O(n)
{
p_age temp[150];//人类的现阶段年龄不会超过150岁
for(int i=0;i<150;i++)
{
temp[i].age=0;
temp[i].count=0;
}

for(int i=0;i<n;i++)
{
temp[age[i]].age=1;
temp[age[i]].count += 1;//记录该年龄有多少人
}
for(int i=0,j=0,k=0;i<150;i++)
{
k=0;
while(temp[i].age==1 && k<temp[i].count)
{

age[j]=i;
j++;
k++;
}
}
}

本方法虽然第二个循环有两层,但是外层循环是一个常数,所以最终的时间复杂度还是O(n);
[解决办法]
COUNTING-SORT

热点排行