桶排序
初步接触桶排序算法,感觉有点蒙,不知道它的基本逻辑及运算,请问桶排序该怎么去理解😣
比如说我定义了一个数组为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; }