排序算法之桶排序
2016-07-26 11:37
204 查看
排序算法之桶排序
桶排序是速度最快的排序啦,简单的说,就是把数据分组,放在一个个预先准备好的有序的桶里,然后输出桶的下角标。
在桶排序中,速度和空间似乎是矛盾的,如果需要排序的数字非常的多,桶排序无疑是最快的,但是由于需要准备好多桶,储存空间的损耗也是非常大的。
所以桶排序适用在需要排序的数据大致相同,而且相对集中。
废话不说啦,我们开始总结桶排序的思路咯。
假如我们有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(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 |
相关文章推荐
- SpringBoot启用HTTPS协议
- bzoj 2243: [SDOI2011]染色 树链剖分+线段树
- The following classes could not be found: - android.support.v7.internal.app.WindowDecorActionBar (Fi
- libc: ../src/pj/os_core_unix.c:692: pj_thread_this: assertion "!"Calling pjlib from unknown/external
- Qt设置全局的widget的stylesheet
- 完整框架下载地址ssm
- uci的api接口的使用(总结)
- shell脚本重启编译应用
- bash中常见特殊字符使用大全
- stringstream的清空操作,注意clear()的使用
- linux搭建apache服务并修改默认路径
- 把display 属性改为block样式变化问题
- Head_First设计模式(三)----工厂模式抽象工厂
- 数字图像处理的基本原理和常用方法
- SSH三大框架的工作原理及流程
- 从理论认识J2EE
- Android studio 导入开源项目及导入项目常见问题
- Git分支管理策略【转】
- B - Cable master
- jpa persist,meger,remove,find方法介绍