之前的博文写了交换(冒泡)排序、选择排序,本文就写写桶排序。不过我理解的这样不算是真正上的桶排序,我的比较简单而真正的桶排序是比较复杂的,暂且就叫桶排序吧。
桶排序在排序中应该用的不多吧,个人理解的是比较简单易懂的,针对小量数据的排序很有用,不过有个小缺点就是只适合在屏幕上打印输出,实际的应用中我们是利用这样排列好之后的数据,我想这就是桶排序应用场合比较少的原因吧。
就简单讲讲吧,故名思意 桶排序就是一排带有序列编号的的桶子,而这编号的范围就是将我们要排序数据包括在内。在我们输入数据的时会在与输入数据相同编号的桶上标记一次,每次输入数据都在与数据相同编号的桶上标记一次,这样每个数据出现的次数就显而易见了,同时排序也好了,我们按照编号顺序依次把没有标记的桶子排除,再根据桶子标记的次数打印等量次数就行了。
#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 哈
原文地址:https://www.cnblogs.com/notfound/p/8407171.html
时间: 2024-10-14 13:02:22