您的位置:首页 > Web前端

剑指offer-第二章排序之年龄排序

2015-05-18 21:28 106 查看
题目:对某个公司的人的年龄(0-99)进行排序,该公司的总人数为几万人。要求时间复杂度为O(n),可以辅助O(n)的空间。

思路:实现函数为void SortAge(int ages[],int len).辅助空间为一个整型数组timesOfAge[100],用来存放每个个年龄的人数(当满足i<len,如果age[i]<=99&&age[i]>=0时候,有timesOfAge[age[i]]++,i++)。用一个嵌套的for对ages[],进行排序。外层用i来代表年龄上限为100,内层用j来代表各年龄的人数,timeOfAge[i]来表示上限。用index代表ages[]数组的下标。执行ages[index++]=i.实现对年龄的排序。

#include<stdio.h>
#include<string.h>

/*
计数排序,员工年龄肯定在0-99之间
*/
void SortAge(int ages[],int len)
{
if(ages == NULL || len<1)
return ;
int timesOfAge[100];
memset(timesOfAge,0,sizeof(timesOfAge));
int i;
//计算每个年龄员工的个数
for(i=0;i<len;i++)
{
if(ages[i]<=99 && ages[i]>=0)
timesOfAge[ages[i]]++;
}
//对ages进行排序
int index = 0;
for(i=0;i<100;i++)
{
int j = 0;
while(j<timesOfAge[i])
{
ages[index++] = i;
j++;
}
}
}

int main()
{
int ages[] = {33,34,45,24,36,23,21,22,19,26,45,34,21,34,34,33,52,22,32,25,27,43,22,21,20,33,26,27,15,29};
int len = 30;
SortAge(ages,len);
int i;
for(i=0;i<len;i++)
printf("%d ",ages[i]);
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: