您的位置:首页 > 其它

公司员工的年龄排序

2014-03-23 22:57 232 查看
取值范围一定(0-100),且远小于记录数的排序(可能上万)。

这是如果可以使用O(n)的辅助空间,可以使时间复杂度降低到O(n)。

用age[10]模拟年龄1-10。25个数据模拟员工数。age数组记录下标表示的年龄人数。统计完age相当于排好了序,然后写入data数组就可以。

#include <stdio.h>
#include <stdlib.h>

void sort(int data[],int length)
{
int age[10],i,j,c = 0;

if(data == NULL || length <= 0)
return;
for(i = 0;i < 10;i++){
age[i] = 0;
}
for(i = 0;i < length;i++){
if(data[i] < 0 || data[i] > 10)
return;
age[data[i]] ++;
}
for(i = 0;i < 10;i++)
for(j = 0;j < age[i];j++)
data[c++] = i;
}

void main()
{
int d[25] = {1,2,3,4,5,4,6,5,4,8,4,7,2,5,5,5,3,9,7,7,4,6,7,5,8},i;
sort(d,25);
for(i = 0;i < 25;i++)
printf("%d ",d[i]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: