T216135 ch5: 初级桶排序

题目描述

小 J 最近终于学到了数组,他知道使用数组就可以对一个数列进行排序了! 今天,他小试牛刀,使用数组来对 $n$ 个数字进行排序。你也会做吗?

输入格式

第一行一个正整数 $n(0 \lt n \le 10^4)$ 第二行连续输入 $n$ 个不大于 $10^4$ 的非负整数。

输出格式

一行,输出这 $n$ 个数从小到大排序后的结果,中间用一个空格隔开。如果一个数出现了多次,在排序结果里只写一次即可。

说明/提示

### 桶排序 通过观察我们发现连续输入 $n$ 个不大于 $10^4$ 的非负整数,这样的数刚好可以用来做数组的下标。 我们现在对数组的使用方法还只有一种: ![](https://cdn.luogu.com.cn/upload/image_hosting/i9gubqn9.png) `a[i] = x;` 表示第 $i$ 个数是 $x$。 现在我们想想,它还能不能反着用呢? `b[x]=1;` 代表什么呢? 表示 $x$ 在 $a$ 数组中出现了 1 次。 $b$ 数组我们称之为“桶”,用来记录一个数在另一个数组中出现的次数。 我们令 $i$ 从 0 开始,循环到输入的数的最大值结束,只要 $b[i]$ 不为 0,就将 $i$ 输出即可。 **特别注意:$b$数组的大小与输入的数的最大值有关,且输入的数必须全部为自然数,可以作为数组下标。**