nyoj 题目1080 年龄排序(下标排序)

本文介绍了一个简单的年龄排序问题,通过计数排序的方式高效地解决了大量年龄数据的排序问题。问题来源于一个竞赛题目,要求对不超过600万人的年龄进行排序,年龄范围限定在150岁之内。

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



http://acm.nyist.net/JudgeOnline/problem.php?pid=1080

年龄排序

时间限制: 2000 ms  |  内存限制: 240000 KB
难度: 0
描述

JXB经常向HJS炫耀他们家乡那里有多么多么好,但是HJS大牛从来对此不屑一顾,某日,他又在那说:“我们那里的人寿命都很高,甚至还有一个150岁的老人呢!”,这次HJS大牛准备调查一下,于是收集了那里每个人的年龄数据,首先得把它们从小到大排序,这个简单的任务就交给你了!

输入
第一行一个n,表示n个数(n<=6000000)
第二行有n个数,表示该地区每个人的年龄
数据只有一组
输出
按递增序列输出这些年龄
样例输入
6
2 5 6 9 15 3
样例输出
2 3 5 6 9 15
提示
由题意,所有人的年龄<=150

#include<stdio.h>
#include<string.h>
#define MAX 6000000
int a[150+10],b[MAX+10];
int main()
{
	int n,m,i,j,k;
	scanf("%d",&n);
	memset(a,0,sizeof(a));
	for(i=0;i<n;i++)
	{
		scanf("%d",&m);
		if(m>150) continue;
		
		a[m]+=1;
	}
	//memset(b,0,sizeof(b));//不能加这个清零,会超时 
	for(i=0,j=0;i<=150;i++)
	while(a[i]--)
	{
		printf("%d ",i); 
	}
	
//	for(i=0;i<j;i++)
//	{
//		printf("%d",b[i]);
//		if(i!=j-1)
//		printf(" ");
//	}
//	printf("\n");

//输出要求不高
//首先最后加不加换行都能过,然后输出最后一个数字后边有没有空格也都能过	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值