剑指offer--算法题--08--员工年龄排序

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


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

    代码如下:

package jzoffer;

public class AgeSort {
	public static void main(String[] args) {
		int [] a = {51,2,6,8,9,5,7,8,9,4,5,6,1,4,7,51,48,47,46,64};
		System.out.println("-----开始记录如下-----");
		printList(a);
		System.out.println("");
		System.out.println("-----排序结果如下-----");
		ageSort(a);
	}
public static void ageSort(int[] args){
	int [] countAge = new int[100];
	if(args == null || args.length <= 0 ){ //特殊性检验
		System.out.println("数组为空!!!");
		return;
	}
	for(int i=0;i<args.length;i++){
		if(args[i]<0 || args[i]>99){
			System.out.println("数组中存在非法年龄!");
		return;
		}
	}
	for(int i = 0;i<args.length;i++){
		countAge[args[i]]++; //遍历传进来的args数组,然后将几岁的存入下标为几的格子里,
	}                        //然后几岁的有几个人,格子里的数就加几
	int curIndex = 0;
	for(int i = 0;i<countAge.length;i++){//遍历count数组,如果下标为几有n个就是,几岁的员工有n个 
		for(int j = 0;j<countAge[i];j++){//然后每次遍历一个格子,要把格子里的数拿到给arg插入几个人
			args[curIndex] = i;          //就这样我们就可以将他们有序排列了
			curIndex++;
		}
	}
	printList(args);
}
public static void printList(int [] a){ //写一个输出模块函数
	for(int i =0;i<a.length;i++){
		System.out.print(a[i]+" ");
	}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值