员工年龄排序

转载请注明出处: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平台的学习,再做个比较好点的项目,完善下之前的项目,总感觉自己的项目拿不出手,而且又不太会吹,哎!!再接再厉吧!校招前要做好充分的准备,放手一搏。。。

员工年龄排序,布布扣,bubuko.com

时间: 2024-10-07 22:50:18

员工年龄排序的相关文章

【剑指offer】员工年龄排序

典型的以空间换时间问题,思路非常重要! /* 员工年龄排序 员工可能有几万名,要求时间复杂度为O(n) 思路:员工的年龄必定在一个范围内,比方0-99,那么我们建立一个大小为100的辅助数组,然后遍历 员工年龄,取到一个年龄就将该年龄相应数组位置的值加1,终于数组中便保存了不同年龄的员工的个数 最后,打印数组就可以. by Rowandjj 2014/7/22 */ #include<iostream> using namespace std; #define MAX 100 void sor

员工年龄排序之桶排序

我也不知道今天这题目纠结半天我在纠结个啥,题目要求对一个公司所有员工的年龄排序,只能申请O(n)大小的辅助空间.然后看到题目里面的解法大致思路是利用辅助空间记录各个年龄的出现次数,然后接下来的代码硬是读了半天. 1 int index=0; 2 for(int i=0;i<=oldestAge;i++){ 3 for(int j=0;j<timesOfAge[i];j++){ 4 age[index]=i; 5 index++; 6 } 7 } 之前看到题目后的意思是对公司的员工年龄排序,比如

年龄排序(计数排序)

/* 员工年龄排序,主要用计数排序的思想,时间复杂度为o(n),需要固定大小的额外辅助空间 */ #include<stdio.h> #include<string.h> /* 计数排序,员工年龄可定在0-99之间 void *memset(void *s, int ch, size_t n) 函数解释:将s中当前位置后面的n个字 节 (typedef unsigned int size_t )用 ch 替换并返回 s .memset:作用是一 段内存块中填充某个给定的值,它是对

剑指offer-第二章排序之年龄排序

题目:对某个公司的人的年龄(0-99)进行排序,该公司的总人数为几万人.要求时间复杂度为O(n),可以辅助O(n)的空间. 思路:实现函数为void SortAge(int ages[],int len).辅助空间为一个整型数组timesOfAge[100],用来存放每个个年龄的人数(当满足i<len,如果age[i]<=99&&age[i]>=0时候,有timesOfAge[age[i]]++,i++).用一个嵌套的for对ages[],进行排序.外层用i来代表年龄上限

[示例-NSArray排序]-根据班级、姓名和年龄排序学生信息

main: 1 #import <Foundation/Foundation.h> 2 #import "Person.h" 3 4 int main(int argc, const char * argv[]) { 5 @autoreleasepool { 6 Person *stu1=[[Person alloc]initClasses:@"iOS8" andName:@"ZXY" andAge:21]; 7 Person *st

COGS 1406. 邻居年龄排序[Age Sort,UVa 11462]

★   输入文件:AgeSort.in   输出文件:AgeSort.out   简单对比时间限制:1 s   内存限制:2 MB [题目描述] Mr.Zero(CH)喜闻乐见地得到了一台内存大大增强的 OI型 Apple Ⅱ,可以运行C,C++,和Pascal!为了炫耀这台高端的计算机,Mr.Zero决心将邻居们的年龄(0≤Age[i]≤120)统计后进行统计.但是,古董终究是古董,Mr.Zero拥有最多n个邻居(n≤2,400,000)但是计算机所能运行程序时的内存限制竟然达到了2MB.请你

集合内部先实现按年龄排序再实现以姓名排序

定义一个实体存放需要排序的数据 package ListAscByCollectionsMethod; /* * 定义一个实体,存放数据. */ public class User { String name; String age; public User(String name,String age){ this.name=name; this.age=age; } public String getAge() { return age; } public void setAge(Strin

字典添加一类,删除,按姓名排序,按年龄排序

#define NSLog(FORMAT, ...) fprintf(stderr,"%s\n",[[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]); #import <Foundation/Foundation.h> #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autorele

年龄排序

描述 JXB经常向HJS炫耀他们家乡那里有多么多么好,但是HJS大牛从来对此不屑一顾,某日,他又在那说:“我们那里的人寿命都很高,甚至还有一个150岁的老人呢!”,这次HJS大牛准备调查一下,于是收集了那里每个人的年龄数据,首先得把它们从小到大排序,这个简单的任务就交给你了! 输入 第一行一个n,表示n个数(n<=6000000)第二行有n个数,表示该地区每个人的年龄数据只有一组 输出 按递增序列输出这些年龄 样例输入 6 2 5 6 9 15 3 样例输出 2 3 5 6 9 15 提示 由题