题目:
1.公司现在要对几万员工的年龄进行排序,因为公司员工的人数非常多,所以要求排序算法的效率要非常高,你能写出这样的程序
输入∶输入可能包含多个测试样例,对于每个测试案例,
一输入的第一行为一个整数n ( l<= n<=1000000):代表公司内员工的人数。
一输入的第二行包括n个整数︰代表公司内每个员工的年龄。其中,员工年龄age的取值范围为( 1<=age<=99)。
输出:对应每个测试案例,
一请输出排序后的n个员工的年龄,每个年龄后面有一个空格。
思路:
计数排序,时间复杂度为线性级别的,O(n²)
package 分治法;
import java.util.Arrays;
import java.util.Scanner;
public class case10_给所有员工的年龄排序 {
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);
System.out.println(Arrays.toString(arr));
}
public static void sort(int[] A) {
int max = 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]--;
}
}
}
private static int maxOf(int[] a) {
int max=0;
for(int i=0;i<a.length;i++){
if(a[i]>max){
max=a[i];
}
}
return max;
}
}