公司员工的年龄排序

本文介绍了一种简单有效的计数排序算法实现,适用于数值范围固定且较小的情况。通过模拟员工年龄的排序过程,演示了如何利用计数排序快速完成数据排序,并提供了一个具体的C语言实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值