1.题目:
对员工的年龄进行排序,要求时间效率为O(n),并且员工大约几万名,最大年龄为99。
2.分析:
对年龄排序,使得年龄从小到大,也就是如果年龄为 24,25,35,21,44,21;则排序后为21,21,24,25,35,44。
因此可以使用一个数组表示年龄出现的次数,下标表示年龄。最终通过统计,将年龄从小到大,检测出现几次就赋值几次,实现排序。
3.实现:
<span style="font-family:Microsoft YaHei;font-size:14px;">// ages[]存放所有员工的无序年龄
public void SortAge(int ages[], int length) {
if (ages == null || length <= 0)
return;
int oldest = 99;
//timesAge[]存放每个年龄出现的次数
int timesAge[] = new int[oldest + 1];
for (int i = 0; i < length; i++) {
int age = ages[i];
timesAge[age]++;
}
int index = 0;
//每个年龄出现几次就将ages数组中赋值年龄几次
for (int i = 0; i <= oldest; i++) {
for (int j = 0; j < timesAge[i]; j++) {
ages[index] = i;
index++;
}
}
}</span>