之前的博文写了交换(冒泡)排序、选择排序,本文就写写桶排序。不过我理解的这样不算是真正上的桶排序,我的比较简单而真正的桶排序是比较复杂的,暂且就叫桶排序吧。
桶排序在排序中应该用的不多吧,个人理解的是比较简单易懂的,针对小量数据的排序很有用,不过有个小缺点就是只适合在屏幕上打印输出,实际的应用中我们是利用这样排列好之后的数据,我想这就是桶排序应用场合比较少的原因吧。
就简单讲讲吧,故名思意 桶排序就是一排带有序列编号的的桶子,而这编号的范围就是将我们要排序数据包括在内。在我们输入数据的时会在与输入数据相同编号的桶上标记一次,每次输入数据都在与数据相同编号的桶上标记一次,这样每个数据出现的次数就显而易见了,同时排序也好了,我们按照编号顺序依次把没有标记的桶子排除,再根据桶子标记的次数打印等量次数就行了。
#include"stdio.h"
int main(void)
{
int i, j;
int n, b[10] = {};//首先将所有桶的标记都重置为 0
for(j = 0; j < 10; j ++)
{
scanf("%d", &n);//依次读入10个数据
b[n] ++;
}
for(i = 0; i < 10; i ++)
for(j = 0; j < b[i]; j ++)//根据次数打印数据
//没有标记的为0那么就不会打印出来
printf("%d ", i);
}
当然这里以10以内的数据为例 如输入 4 4 5 6 1 0 4 4 6 8 输出结果为 0 1 4 4 4 4 5 6 6 8
在运用就自行调整数据范围,更改数组的大小、更改for的范围使之刚好可以把最值包含在内,这样至少可以省点时间。
#include"stdio.h"
//排序四位数
int main(void)
{
int i, j;
int n, b[10000] = {};//调整数组大小
for(j = 0; j < 10; j ++)
{
scanf("%d", &n);//依次读入10个数据
b[n] ++;
}
for(i = 1000; i < 10000; i ++)//调整范围
for(j = 0; j < b[i]; j ++)
printf("%d ", i);
}
如上修改了一下 就可以用来排序四位数 输入数据 3234 6535 8743 9876 4567 5466 5434 2345 8798 4323 输入结果为 2345 3234 4323 4567 5434 5466 6535 8743 8798 9876
实际运用就实际修改咯 我个人理解的桶排序是很简单的 但真正的桶排序是有点复杂的 笔者只是了解下 如要深入还需自行百度 Google 哈