Java算法 “桶排序”
Posted 动力节点Java学院
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java算法 “桶排序”相关的知识,希望对你有一定的参考价值。
在生活中年龄的大小、身材的高矮、体重的胖瘦、收入的多少、颜值的高低,都可以通过数据统计或评测给出排序结果,在某种意义上排序也是人和人区别的一种体现,而在Java语言中排序也回去经常遇到算法排序的问题,怎么样用程序实现数据
快速排序呢?下面就来给大家介绍一种相对简单的方法——“桶排序”。
考试成绩排名是老师经常干的事情,我们就以期末考试成绩排序为例,来讲解“
桶排序”。
小哼班上只有5个同学,这次期末考试的成绩分别是5分、3分、5分、2分和8分,这成绩真是惨不忍睹(因为满分是10分)。下面我们就把考试成绩从高到低进行排序,
结果是:8 5 5 3 2
现在你要思考一下你有什么好的编写方法,能够实现时机输入的5个数能够从大到小输出?
先来申请一个大小为11的数组
int a[11],设定好后你就拥有了
10个变量,我们把它们进行编号从
a[0]——a[1
0],为了表示它们从未有人得过这个分数,
我们把这10个变量都初始化为0,如a[0]=0表示目前没有人得过0分,同样a[3]=0就表示目前没有人得过3分……a[10]=0表示目前没人得过10分。
下面开始“翻牌子”处理这些分数吧~ 第一个同学的分数是5分,就把a[5]的值在原基础上加1,
现在a[5]的值是1,就表示这个5分出现过一次了。
第二个分数是3分,我们就把a[3]相对应的从0改成1 ,表示3分也出现过一次了。
接下来又是一个5分,我们只需要在现基础上在加1,表示5分又出现了一次,现在a[5]的值是2
按照上边的方法来处理接下来的两个分数,分别是2分和8分
通过以上的操作,或许你已经发现了
a[0]~a[10]的值实际上就是0—10分出现的次数,我们只需要把出现的分数打印出来就可以了,出现几次就打印几次,如下:
a[5]值是2, 表明“5”出现过2次,打印5 5。
a[10]值是0,表示“10”没有出现过,不打印。
最后在屏幕上输出“2 3 5 5 8”,完整的排序代码如下:
认真的思考的小伙伴一定发现了,我们刚才做的排序是从小到大的,现在要求的是要我们从大到小排序,
那要怎么办呢?
for(i=0;i<=10;i++)改为for(i=10;i>=0;i--)就可以实现啦!
这种排序方法我们暂且称之为,桶排序,实际上真正的桶排序比这要复杂一些,以后再详细介绍,目前这个方法就可以满足初学需要了。
这种算法就好比是有0—10共11个木桶,每当出现一数,就在于其相对于的木桶里放一面小旗子,我们上边的例子中,编号是5的木桶里一共放了两面小旗子,表示5出现过两次,,编号是2的木桶里放1面小旗子,表示2出现过一次,编号是3的木桶里放一面小旗子,表示3出现过一次,编号是8的木桶里放一面小旗子,表示8出现过一次。
下面你也可以自己做个练习,在0—1000之前任意取n个整数,并将它们从小到大排序。
在这要特别提醒一下你:0—1000之前进行排序,我们需要的是
1001个木桶,不是1000个,这个一定要注意。木桶是为了帮助你的理解,
其实际的作用就是“标记”每个数字出现的次数,所以在编程中我们更习惯将之前数字的a替换成book,book单词有记录、标记的意思),
代码实现如下:
8 100 50 22 15 6 1 1000 999 0
1000 999 100 50 22 15 8 6 1 0
桶排序从1956年就开始应用了,排序基本思想是由E.J.Issac R.C.Singleton提出来。在上边我们说过,刚才的实例算不上真正意义的
桶排序,我们也可以称它是简化版的
桶排序,真正的
桶排序要比这个更加复杂,在最开始接触我们就一步一步来,从简单到难慢慢积累。
延伸阅读:之所以说他它算不上真正意义上的
桶排序,因为在遇到一些问题这种简单的算法可能解决不了:比如现在分别有5位学生的名字和分数:gaga5分、hehe3分、zizi5分、xixi2分和xueba8分。下面请按照分数从高到底进行排序,并输出他们的名字。你输入这5个人的名字后是不是发现问题了?如果我们采用简化版的
桶排序法,仅仅解决的是分数排序,最后输出的也只能是分数,但对人本身没有进行排序,所以我们无法知道与每一个分数相对应的是哪一个人!这个问题要怎么解决呢?大家先把今天的内容消化了,以后再详细介绍。
关注公众号
回复 “二维码” 获取谢老师微信添加即可免费领取
Java全套自学教程(添加老师微信请备注:最新教程)
点击左下方蓝色
阅读全文
看10个Java学习小计划
以上是关于Java算法 “桶排序”的主要内容,如果未能解决你的问题,请参考以下文章
用Java实现桶排序算法
挑战程序设计竞赛(算法和数据结构)——7.4计数排序(桶排序)的JAVA实现
十大经典排序算法最强总结(含Java代码实现)
基数排序算法的Java实现
八大排序算法Java(转)
java实现桶排序