排序之桶排序

原创 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个小朋友分数的最高分,也可获得一个符合例题情况的上界。同理,也可以动态获得一个下界。


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

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

相关文章推荐

桶排序 c++实现

  • 2011年12月13日 11:04
  • 3.45MB
  • 下载

iOS桶排序算法

  • 2014年05月21日 18:01
  • 69KB
  • 下载

【桶排序】MAXIMUM GAP

题目:leetcode Given an unsorted array, find the maximum difference between the successive elements in ...

桶排序 c++

  • 2014年05月27日 16:47
  • 2KB
  • 下载

桶排序算法

  • 2014年12月07日 16:14
  • 3.56MB
  • 下载

Python实现桶排序

实现范围为1~M的桶排序 对于数组A,包含N个整数,值从1到M,我们可以利用一种非常快速的排序,桶排序(bucket sort)。创建一个数组S,里面含有M个桶,初始化为0。然后遍历数组A,读入Ai...
  • will130
  • will130
  • 2015年04月21日 15:22
  • 858

BWT轮换之桶排序实现

  • 2011年07月03日 16:56
  • 59KB
  • 下载

Pthread多线程并行实现桶排序

  • 2017年06月03日 22:02
  • 6KB
  • 下载

数据结构之桶排序

package com.zhiru; /* * 桶排序 * 思路:将读入数据序列放入不同的桶中, * 桶个数=数据中最大的数据+1; * 对每个桶进行排序【排序方法任意】 * 最后顺序输出各...

桶排序C语言实现

  • 2017年06月03日 21:58
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序之桶排序
举报原因:
原因补充:

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