已知条件:
1.所需排序的数字在一个较小的范围内(0~99);
2.可以使用辅助内存。
实现代码如下:
void SortAge(int ages[],int length)
{
if(ages==nullptr || length<=0) return;
const int oldestAge=99;
int timesOfAge[oldestAge+1];
for(int i=0;i<length;++i)
timesOfAge[i]=0;
for(int i=0;i<length;++i)
{
int age=ages[i];
if(age<0 || age>oldestAge)
throw new std::exception("age out of range.");
++timesOfAge[age];
}
int index=0;
for(int i=0;i<=length;++i)
{
for(int j=0;j<timesOfAge[i];++j)
{
age[index]=i;
++index;
}
}
}
公司员工的年龄有一个范围。在上面的代码中,允许的范围是0~99岁。数组timesOfAge用来统计每个年龄出现的次数。某个年龄出现了多少次,就在数组ages里设置几次该年龄,就相当于给数组ages排序了。该方法用长度为100的整数数组作为辅助空间换来了O(n)的时间效率。