题目:实现一个排序算法,对公司所有员工的年龄进行排序,要求时间效率O(n),空间不能超过O(n)
分析:因为员工年龄有一个限制,比如0~99,我们可以定义一个长度为100的int数组来保存每个年龄段出现的次数,用数组序号来表示员工的年龄,自然而然算法实现如下:
#include <stdio.h>
void sortages(int ages[], int length)
{
if (length <= 0)
return;
const int max_ages = 99;
int timesofage[max_ages+1];
int rank = 0;
int i, j;
//init timesofage array
for (i = 0; i <= max_ages; ++i)
timesofage[i]=0;
//count age repeated times
for (i = 0; i < length; ++i)
{
if (ages[i] < 0 || ages[i] > max_ages)
return;
++timesofage[ages[i]];
}
//rank age
for (i = 0; i <= max_ages; ++i)
for (j = 0; j < timesofage[i]; ++j)
{
ages[rank] = i;
++rank;
}
}
int main()
{
int i = 0;
int ages[10] = {13, 14, 15, 21, 24, 13, 17,19,15,21};
sortages(ages, 10);
for (i = 0; i < 10; ++i)
printf("ages[%d]=%d\n", i, ages[i]);
return 0;
}