题目描述:我们想对公司所有员工(几万名)的年龄排序。要求时间复杂度O(n)。
分析:要排序的年龄在一个比较小的范围,假设最大的员工年龄是99。并且还可以用辅助内存。该方法用长度100的整数数组作为辅助空间换来了O(n)的时间效率。
void SortAges(int ages[], int length)
{
if(ages == NULL || length <=0)
return;
const int oldestAge = 99;
int timesOfAge[100]; //用来统计每个年龄出现的次数
for(int i =0; i <=oldestAge; ++i)
timesOfAge[i] = 0; //初始化数组
for(int i =0; i <length; ++i)
{
int age = ages[i];
++ timesOfAge[age]; //年龄作为数组的下标
}
int index = 0;
for(int i =0; i <=oldestAge; ==i) //某个年龄出现了多少次,就在数组ages里设置几次年龄,这样就相当于给数组排序了。
{
for(int j = 0; j <timeOfAge[i]; ++j)
{
ages[index] = i;
++ index;
}
}
}