桶排序的概念是,把数据放到有编号的桶里,再按照桶编号有小到大,或由大到小把数据倒出来。
比如,现在我们有一个a的数组,他有8个元素,也就是8个桶。
现在这个数组的所有值都是0。
我们需要输入这样一段数字 1,4,2,1,5,6,5
我们就按照桶的编号放入数字,比如输入1,就把a[1]的值加1。
现在就是这样的:
然后我们遍历这个桶,就可以挨个打印出来,代码如下:
#include <Windows.h>
int main()
{
int a[1024]; //1024个桶
for (int i = 0; i < 1024; i++) //把1024发桶全部赋值为0
a[i] = 0;
for (int i = 0; i < 5; i++) //循环读入5个数字
{
scanf_s("%d", &j);
printf("已经输入了%d个\n", i + 1);
a[j]++; //把标记的桶加1
}
for (int i = 0; i < 1024; i++) //遍历桶
for (int j = 1; j <= a[i]; j++) //只要这个桶的值大于或者等于1,就进入循环
{
printf("%d ", i);
}
system("pause");
return 0;
}
尝试一下
不过桶排序有很明显的缺点,如果要对大数进行排序,比如23424,12222,12313,这样的数字,他就需要有很多很多桶,很浪费空间,适合于数字之间差距比较小的排序。