排序算法之桶排序_Baron.Best的博客-程序员宅基地

技术标签: 算法  

排序算法之桶排序

桶排序是速度最快的排序啦,简单的说,就是把数据分组,放在一个个预先准备好的有序的桶里,然后输出桶的下角标。

在桶排序中,速度和空间似乎是矛盾的,如果需要排序的数字非常的多,桶排序无疑是最快的,但是由于需要准备好多桶,储存空间的损耗也是非常大的。

所以桶排序适用在需要排序的数据大致相同,而且相对集中。

废话不说啦,我们开始总结桶排序的思路咯。

假如我们有a(1)~a(10)十个桶,我们有五个数字需要排序:                                                                                                                                                                                                                                                            

假设这五个数字分别是8、5 、6、3、6

桶排序最为突破性的思想是变排序为不排序,选择排序、冒泡排序等其他排序似乎都需要比较和交换,但是桶排序不需要。你只是需要把需要排序的数据放在已经有序的桶里,输出下角标。就已经完成排序咯。

如上图所示,我们把数据“3”放进桶“a(3)”里,把数据“5”放在同“a(5)”里,因为数据“6”有两个,所以需要在桶“a(6)”放“1+1”两个,如下类似。这样我们打印出桶内有数据的桶的下角标就得到了3 、 5、 6 、6、8。

我们用VB实现这个过程(仅供参考):

    Dim a(10) As Integer   ‘ 定义数据类型

   

    For i = 1 To 5     

      m = Val(InputBox("请输入""输入框", 0))      '依次输入5个值         

      a(m)= a(m) + 1 '桶的初始值为0,增加一个数,a(m)内的值增加1

   Next

   

    For j = 0 To 10     '遍历每一个桶,判断桶内有无元素

        If a(j) <> 0 Then           '如果桶内有元素

            For t = 1 To a(j)       '依次输出桶内元素

                Print j         '打印桶的下角标

            Next

        End If

    Next 

是的,桶排序就就是这么简单,但是仅仅是知道和理解还是不行,我们要多练习,才能切实的掌握它。

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

a(10)

 

 

1

 

1

2

 

1

 

 


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Baronrothschlid/article/details/52034251

智能推荐

jenkins与gitlab持续集成配置webhook报500错误_ERD Online的博客-程序员宅基地

错误现象:控制台日志:URI::InvalidURIError (URI::InvalidURIError): lib/gitlab/proxy_http_connection_adapter.rb:14:in `connection' app/services/web_hook_service.rb:73:in `make_request' app/services/web_ho...

struts图片上传,字符串处理,流处理_0_o_c的博客-程序员宅基地

1、前端上传的主要代码: 2、后台处理主要代码: String root=ServletActionContext.getServletContext().getRealPath("/");

转起来:Jeff Molofee(NeHe) 的 OPENGL 教程-第四课_烟波三千里人鬼五百年的博客-程序员宅基地

<!--font { font-family: Arial; line-height: 180%; font-size: 12pt; margin-top: 2; margin-bottom: 2 }body { font-family: font }td { border-left-co

C++ Qt5 范例开发大全:_zhangxueyang1的博客-程序员宅基地

链接:http://download.csdn.net/detail/mycodream/7452387

PHP表单(get,post)提交方式_表里如一°的博客-程序员宅基地

PHP 表单处理PHP 超全局变量 $_GET 和 $_POST 用于收集表单数据(form-data)。$_GET 是通过 URL 参数传递到当前脚本的变量数组。$_POST 是通过 HTTP POST 传递到当前脚本的变量数组。有一点很重要的事情值得注意,当处理 HTML 表单时,PHP 能把来自 HTML 页面中的表单元素自动变成可供 PHP 脚本使用

随便推点

LimeSDR实验教程(10) DVB-S发射和接收_老邵的开源世界的博客-程序员宅基地

我在windows下实现了dvb-s的发射和接收。发射使用的是limesdr-mini,接收使用的是hackrf/limesdr-usb。这次和以前的dvb-t发射不同,这次的发射和接收都是用软件实现的,并且都是开源的,以前的dvb-t接收机虽然是rtlsdr,但是是用芯片解调的dvb-t。不过接收机是sdrangel,有点难编译,并且datv express编译好的版本好像也只有wi...

Effective C++ 2e Item31_lostmouse的博客-程序员宅基地

条款31: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用本条款听起来很复杂,其实不然。它只是一个很简单的道理,真的,相信我。先看第一种情况:返回一个局部对象的引用。它的问题在于,局部对象 ----- 顾名思义 ---- 仅仅是局部的。也就是说,局部对象是在被定义时创建,在离开生命空间时被销毁的。所谓生命空间,是指它们所在的函数体。当函数返回时,程序的控制离开了这

什么是Ruby on Rails_cowboy_wz的博客-程序员宅基地

让我们先来看一张图片: 看完这张图片,我心里充满疑惑,难道Ruby + Rails真的能够有这么好吗? 心里有这么几个疑问:Ruby是谁开发的? Ruby是什么? Rails是什么? Ruby on Rails与目前已经有的开发语言相比有什么优点?为什么要使用它? Ruby on Rails稳定吗?效率高吗?能够承受大数据量的访问吗? Ruby on Ra

凸包GiftWrapping GrahamScan 算法实现_xcl522的博客-程序员宅基地

开始游戏内有需求做多边形碰撞功能,但是接入box2d相对游戏的需求来说太重度了。所以准备自己实现碰撞。确定多边形,必然要用到凸包的算法。在github上也找到了一些lua实现,但是这里的算法没有考虑多点共线的问题。所以准备自己实现准备这里提到的所有凸包,都指的平面上的。思路凸包的具体定义,这里不赘述。一种通俗的说法,在木板上钉钉子,我们用一根麻绳绑住

Oracle数据库中distinct的用法_丨心静如水丨的博客-程序员宅基地

distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。下面先来看看例子:table表字段1     字段2   id        name   1           a   2   

大数据平台架构技术选型与场景运用_钱曙光的博客-程序员宅基地

导读:本文将大数据的工作角色分为三种类型,包括业务相关、数据科学相关和数据工程。大数据平台偏向于工程方面,大数据平台一般包括数据源、数据采集、数据存储、数据分析等方面。 讲师从数据来源、数据源结构、数据变化程度和数据规模等4个维度对数据源进行分类,数据源分类维度的不同决定最后的技术选型。讲师还对数据源分类的定义及选型方式进行详细讲解,最终联系到大数据的应用场景,让数据应用方式更加直...

推荐文章

热门文章

相关标签