核心思想:
把数据和数组元素下标相对应,数组元素为该下标数据的个数,直接输出下标就可以实现排序。
排序方法:
假如现在有10个同学考的分数依次为8, 6 ,8,10 ,5 ,7 ,6 ,9 ,4 ,5 分,对这10个同学的分数从小到大进行排序,最大的数为10,我们需要找11个桶,从a(0)到a(10),初始化a(0)到a(10)为0
现在处理每一个同学的分数, 第一个同学的分数为8,我们就将相对应的a(8)的值在原来的基础上加1,a(8)的值由原来的0变成了1,表示8分的同学有一个了。
第二个同学的分数为6分,我们就将相对应的a(6)的值在原来的基础上加1,a(6)的值由原来的0变成了1,表示6分的同学出现了1个
第三个同学的分数为8分,我们就将相对应的a(8)的值在原来的基础上加1,a(8)的值由原来的1变成了2,表示8分的同学出现了2个
依次从左到右看每个同学的分数,我们就将以分数为下标的相对应的数组元素的在原来的基础上加1,数组元素的值表示该分数的同学个数,最后的结果为:
一张图表示桶排序:
代码:
将输入的数为下标的数组的元素在原来的基础上加1
<span style="font-size:18px;">'初始化数组元素为0
For i = 0 To 10
a(i) = 0
Next i
'输入10个数,并且巧妙地把输入的数当做了数组下标,每输入一个数,就在以该数为下表的数组元素的值加1
For j = 1 To 10
m = Val(InputBox("请输入:", "数据输入"))
a(m) = a(m) + 1</span>
<span style="font-size:18px;">'遍历数组下标从0到10
For k = 0 To 10
'数组元素的值不等于0.证明该数组元素的下标个数不为0,输出下标。
If a(k) <> 0 Then
't为数组元素的值,代表下标的个数,输出几个
For t = 1 To a(k)
Print k
Next t
End If
Next k</span>
总结:
桶排序法是最简单,最快的一种排序方法,缺点是占用空间比较大。