这个其实挺好的理解的
比如说我定义了一个数组为a[11]
然后就是,数组的下标表示
数列中的相同的数字,然后改下标对应的是这个数字出现次数
比如说,定义变量num一次输入3,2,3,4,5,2,6,1,8
Step 1:输入3,那么其所对应的“桶”就是3号桶,所以a[3]++
Step 2:输入2,那么对应2号桶,所以a[2]++
Step 3:输入3,同样的,对应3号桶,a[3]++
......
Step n:输入num,则a[num]++
经过如上操作以后,列举出各桶存放的数量
桶号: 0 1 2 3 4 5 6 7 8 9 10
数量:0 1 2 2 1 1 1 0 1 0 0
【简而言之,数量表示桶号在给出数列中出现的次数】
接下来是输出操作,我们发现,有些桶里是空的,也就是0次,所以我们无需输出,则:
找到0号桶,为空,跳过
找到1号桶,不为空,设其数量为n,则重复输出n次桶号;此时,n=1,所以输出一次1
找到2号桶,不为空,如上;此时n=2,输出2次2
找到3号桶,不为空,如上;此时n=2,输出2次3
...
找到n号桶,如果为空,则跳过;如果不为空,输出n桶中存的数值,并重复输出其数值次n
示例(仅供参考)

程序代码:
#include <cstdio>
using namespace std;
int a[1001];
int main() {
int n;
printf("输入你想排序的数字个数:");
scanf("%d",&n);
printf("输入你想排序的数字:");
for(int i=1,t; i<=n; i++) {
scanf("%d",&t);
a[t]++; //出现次数+1
}
printf("排序结果输出:");
for(int i=0; i<=1000; i++) {
if(a[i]!=0) { //对空桶的筛选
for(int j=1; j<=a[i]; j++)
printf("%d ",i);
}
}
return 0;
}