【剑指offer】员工年龄排序

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25144793


    对公司所有员工的年龄进行排序,公司总共有几万名员工,要求时间复杂度为O(n)。


    很明显的计数排序题目,员工的年龄肯定在一个范围之内,我们这里假设在0-99之内,算很大了,这样就可以开辟一个长度为100的数组,保存各个年龄的员工的个数。

    代码如下:

/*
员工年龄排序,主要用计数排序的思想,
时间复杂度为O(n),需要固定大小的额外辅助空间
*/
#include<stdio.h>
#include<string.h>

/*
计数排序,员工年龄肯定在0-99之间
*/
void SortAge(int ages[],int len)
{
	if(ages == NULL || len<1)
		return ;
	int timesOfAge[100];
	memset(timesOfAge,0,sizeof(timesOfAge));
	int i;
	//计算每个年龄员工的个数
	for(i=0;i<len;i++)
	{
		if(ages[i]<=99 && ages[i]>=0)
			timesOfAge[ages[i]]++;
	}
	//对ages进行排序
	int index = 0;
	for(i=0;i<100;i++)
	{
		int j = 0;
		while(j<timesOfAge[i])
		{
			ages[index++] = i;
			j++;
		}
	}
} 

int main()
{
	int ages[] = {33,34,45,24,36,23,21,22,19,26,45,34,21,34,34,33,52,22,32,25,27,43,22,21,20,33,26,27,15,29};
	int len = 30;
	SortAge(ages,len);
	int i;
	for(i=0;i<len;i++)
		printf("%d ",ages[i]);
	printf("\n");
	return 0;
}

    测试结果:



    算法准备放一放了,马上就要开题了,居然一点紧张感都没有,论文方向是搞视频异常检测的,还是有点小难度的,导师虽然是所谓的国家有突出贡献科学家,但是依然不管不问,毕竟这么大把年纪了,也可以理解,万事还是要靠自己!

    渐渐从实习生招聘的阴影中走出来了,其实也就面了两家公司而已。开题后要转移重点了,做了些Android项目,但是掌握比较深入的却在jvm和java并发机制,Android平台相关的技术掌握的比较皮毛,接下来要加深对网络协议,java网路编程和Android平台的学习,再做个比较好点的项目,完善下之前的项目,总感觉自己的项目拿不出手,而且又不太会吹,哎!!再接再厉吧!校招前要做好充分的准备,放手一搏。。。


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值