所有员工的年龄排序
- 公司现在要求对几万员工的年龄进行排序,因为公司员工的人数非常多,所以要求排序算法的效率要非常高,你能写出这样的程序吗
- 输入:输入可能包含多个测试样例,对于每个测试案例,
- 输入的第一行为一个整数n(1<= n<=1000000): 代表公司内员工的人数。
- 输入的第二行包括n个整数:代表公司内每个员工的年龄。其中,员工年龄age的取值范围为 (1<=age<=99)。
- 输出:对应每个测试案例,
- 请输出排序后的n个员工的年龄,每个年龄后面有一个空格。
思路: 你可能会看不出来,其实用的就是计数排序。
计数排序适用于数据范围小且已知
不懂计数排序的,先看我计数排序的文章
public class 所有员工年龄排序 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();
int i = 0;
int[] arr = new int[x];
while(i<x){
int p = scanner.nextInt();
arr[i++] = p;
}
sort(arr);
Util.print(arr);
}
public static void sort(int[] A){
int max = Util.maxOf(A);
int[] helper = new int[max+1];
for(int e : A){
helper[e]++;
}
int current = 0;
for(int i=1;i<helper.length;i++){
while(helper[i]>0){
A[current++] = i;
helper[i]--;
}
}
}
}