公司员工的年龄排序

来源:互联网 发布:虚拟股华为知乎 编辑:程序博客网 时间:2024/04/28 18:10

取值范围一定(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]);}


0 0
原创粉丝点击