#t76. 初级桶排序

初级桶排序

初级桶排序

题目描述

小 J 最近终于学到了数组,他知道使用数组就可以对一个数列进行排序了!

今天,他小试牛刀,使用数组来对 nn 个数字进行排序。你也会做吗?

输入格式

第一行一个正整数 n(0<n≤104)n(0 \lt n \le 10^4)

第二行连续输入 nn 个不大于 10410^4 的非负整数。

输出格式

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

样例输入 1

5
3 7 0 2 4

样例输出 1

0 2 3 4 7

样例输入 2

5
1 2 1 2 1

样例输出 2

1 2

桶排序

通过观察我们发现连续输入 nn 个不大于 10410^4 的非负整数,这样的数刚好可以用来做数组的下标。

我们现在对数组的使用方法还只有一种:

a[i] = x; 表示第 ii 个数是 xx。

现在我们想想,它还能不能反着用呢?

c[x]=1; 代表什么呢?

表示 xx 在 aa 数组中出现了 1 次。

cc 数组我们称之为“桶”,用来记录一个数在另一个数组中出现的次数。

我们令 ii 从 0 开始,循环到输入的数的最大值结束,只要 c[i]c[i] 不为 0,就将 ii 输出即可。

特别注意:cc数组的大小与输入的数的最大值有关,且输入的数必须全部为自然数,可以作为数组下标。