算是一道算法题吧
公司员工数据结构体,包含{NAME,AGE}项,现在要打印出员工名单,以AGE从小到大为序,要求时间度为O(n).求大神指教
[解决办法]
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct node
{
int val;
node *next;
};
struct per
{
char name[50];
int age;
}P[100000];
node * hash[120];
int r[100000];
int n;
void ini()
{
node * p;
for(int i=1;i<120;i++)
{
p=new node;
p->next=NULL;
hash[i]=p;
}
}
int main()
{
//freopen("c:/in.txt","r",stdin);
//freopen("c:/out.txt","w",stdout);
int i,j,k=0;
node *v,*head;
while(cin>>n)
{
ini();
for(i=0;i<n;i++)
{
scanf("%s %d",&P[i].name,&P[i].age);
v= new node;
v->val=i;
v->next=NULL;
head=hash[P[i].age];
while(head->next)
{
head=head->next;
}head->next=v;
}
for(i=1;i<120;i++)
{
head=hash[i];
while(head->next)
{
head=head->next;
r[k++]=head->val;
}
}
for(i=0;i<n;i++)
{
printf("%s\n",P[r[i]].name);
}
}
return 0;
}
输入:
10
www 10
sss 20
ddd 40
wwwww 50
ssssss 60
ssssddd 20
ddds 15
sss 65
shwj 100
fff 110
输出:
www
ddds
sss
ssssddd
ddd
wwwww
ssssss
sss
shwj
fff
分析:
时间复杂度:大约O(120*n)总起来看时间复杂度 O(n)