排序之桶排序

原创 2016年05月30日 20:46:05

本文以《啊哈!算法》为教材,个人理解整理。


例:老师要给5个小朋友进行打分,满分为10分,要求将最终的分数从高到低排序后显示出来。

  输入:5  3  5  2  8

  输出:8  5  5  3  2


桶排序就像它的名字一样和桶很相似,如分数的范围为0~10,那就可以分为11个“桶”,分别为:

桶0,桶1,桶2,桶3,桶4,桶5,桶6,桶7,桶8,桶9,桶10。所有的桶一开始都是空的。


如果一个小朋友得分为5,就在桶5中放入一个代表物,如旗子,表示得分为5的有1人。同样地,如果一个小朋友得分为3,就在桶3中放入一个旗子,以此类推。


最后,由于要求从高到低排序,因此应该从桶10开始确认每个桶中的旗子数量,有几个旗子就输出几次桶的序号,如桶8一个旗子,桶5两个旗子,输出即为8  5  5。


用C语言表示,需要首先定义一个11位的数组a[11],并将a中每个元素都初始化为0,再循环5次获取5个小朋友的成绩,获取的同时将a中对应位置的数值增加1,如得5分则a[5]++,得8分则a[8]++,以此类推。


最后倒序输出,即从a[10]开始循环,根据每个元素的数值输出相应次数的下标。


int main()
{
	int a[11], i, j, t;
	for(i = 0; i <= 10; i++)
	{
		a[i] = 0; //初始化桶内为0 
	}
	
	for(i = 0; i < 5; i++)
	{
		scanf("%d", &t);
		a[t]++; //将要排序的数字放入相应的桶中 
	}
	
	for(i = 10; i >= 0; i--) //从大到小排序输出 
	{
		for(j = 1; j <= a[i]; j++)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

        

以上是桶排序最简单的思路了,今天学习完这个,我思考它的特征,最初猜测是不是在数值最大和最小范围确定的情况下(现在我还不考虑效率等其他因素),可以使用桶排序解决。但是思考了下,假如例题中分数下界0是确定的,上界是不确定的情况下,只需判断5个小朋友分数的最高分,也可获得一个符合例题情况的上界。同理,也可以动态获得一个下界。


写着写着突然觉得其实我可以不用思考这么多,应用时本身都是需要根据实际情况进行修改的,我从一个当前定死的算法上去延伸实际应用,面对的可能是无穷无尽的郁闷。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java排序算法(十)--桶排序

前面的1~8介绍的都是基础的排序的算法,现在来介绍一种高效的排序算法–桶排序。桶排序的原理是:将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排...
  • y999666
  • y999666
  • 2016年04月22日 15:32
  • 1763

排序算法十:桶排序

排序算法十:桶排序 引言在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。系列博文的上一篇讲述了基数排...
  • LG1259156776
  • LG1259156776
  • 2015年09月29日 09:56
  • 15960

【算法】桶排序

桶排序 桶排序(Bucket Sort)假设输入数据服从均匀分布,然后将输入数据均匀地分配到有限数量的桶中,然后对每个桶再分别排序,对每个桶再使用其他的排序算法,最后将每个桶中的数据有序的组合起来。前...
  • cauchyweierstrass
  • cauchyweierstrass
  • 2015年11月19日 13:18
  • 3650

桶排序算法实现-PHP

简单意义上的桶排序: 桶排序的原理是先安排N+1个桶作为容器,若数据范围为N的话。 然后将测试数据(所需排序的数据)进行循环,放入对应的桶内。数据一定是在范围N内的。 最后,循环桶里的元素,并且输出,...
  • visiontime
  • visiontime
  • 2017年02月28日 18:36
  • 466

最快排序之"桶排序"

桶排序的基本思想就是利用空间换时间,如果将一最大值为100000的一组数进行排序,最简单粗暴的方法就是桶排序,创建一个100001这么大的数组,每一位代表一个一个数,初始化时将数组全部赋值为零,一次读...
  • djd1234567
  • djd1234567
  • 2015年08月26日 15:43
  • 1167

#算法#C/C++#排序--桶排序

偶然听见学姐说考研机试要考CCF,然而自己啥都不会,好忧心,想想自己曾经也考过CCF, 可是~~~~ 因此,打算从头开始新的过程,(然而并不是重新做人,只是想好好学习吧)。 言归正传,本人水平有...
  • Happy_Yu_Life
  • Happy_Yu_Life
  • 2017年04月14日 19:16
  • 332

Python实现八大排序算法(转载)+ 桶排序(原创)

插入排序 核心思想 代码实现 希尔排序 核心思想 代码实现 冒泡排序 核心思想 代码实现 快速排序 核心思想 代码实现 直接选择排序 核心思想 代码实现 堆排序 核心思想 代码实现 归并排序 核心思想...
  • Marksinoberg
  • Marksinoberg
  • 2016年09月06日 12:03
  • 6468

桶排序,冒泡排序,快速排序算法Python实现

桶排序案例:学生分数为0~10,要按照从小到大排序: 1. 首先我们需要申请一个大小为10的数组(python为列表),然后遍历学生成绩,每遍历一个成绩就在序号=成绩的位置+1. 2. 生成完列表...
  • horseinch
  • horseinch
  • 2016年07月20日 23:11
  • 1278

PHP排序算法系列:桶排序

桶排序桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽...
  • qq_32300363
  • qq_32300363
  • 2017年04月26日 22:19
  • 242

【啊哈!算法】算法1:最快最简单的排序——桶排序

最快最简单的排序——桶排序     在我们生活的这个世界中到处都是被排序过的。站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排...
  • ahalei
  • ahalei
  • 2014年02月24日 15:27
  • 2140
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序之桶排序
举报原因:
原因补充:

(最多只允许输入30个字)