前言
说算法前,一定要说的一件事就是:比你优秀,比你努力的大有人在,米老师就是,剩下的就不说了,自己体会吧。
桶排序,让我明白了什么是大道至简。经过几天的上课,自己也渐渐的对算法产生了兴趣,红利是运行成功的那一刻心情是美好的。
规则
对于一种算法,常常我们一下子很难写出代码,这之间需要一个过程,对算法的规则的研究以及自己对算法这个过程的描述。桶排序大道至简在哪里呢?他的原理是这样的,NO1.准备好足够用的桶,我们用数组a(i)对桶进行编号;NO2.将我们要排序的数和桶的下标对应起来,这是做一个标记也可以说我们把数放在了下标里。NO3.我们遍历每个桶,将做过标记的桶的下标进行输出,即可完成排序。
描述
那么这个排序如何实现呢?背景介绍,有一个文本框可以确定产生多少个数,接着我们可以对产生的数进行排序。首先简单的描述一下:
1.产生一定的数准备排序,
2. 遍历产生的每一个数,并将这些数和桶的下角标对应起来。3.对桶做标记,若桶的角标和要排序的数可以对应起来一次,我们标记这个桶 为1,对应了两次,我们标记这个桶为2,为什么要这样呢?马上你就会知道答 案的!4.遍历每一个桶,根据桶标记的次数,我们输出桶的下角标。代码介绍
现在我们根据上面的描述,尝试的写一下,桶排序的代码:'随机产生要排序的数 For i = 1 To Val(Text1.Text) v(i) = Int(100 * Rnd + 1) p = p & v(i) & "," Next i '将产生的数对应上桶的下角标 For i = 1 To Val(Text1.Text) 'text文本框用来确定产生随机数的个数 t(v(i)) = t(v(i)) + 1 '将数放入桶的下角标,我们标记一次 Next i '遍历每个桶,将下角标取出 For j = 1 To 100 '100是因为我们产生的是一百以内的随机数,这里可以自己定义 '判断桶的标记的次数 If t(j) <> 0 Then For k = 1 To t(j) m = m & j & "," '将桶的下角标取出 Next k End If Next j
结语
桶排序让我感受到了算法的快乐,不过他也是有局限性的,就是桶排序会造成有的桶没有用上,造成一定的空间浪费,当然不可否认,桶排序的速度很快的,总之,这个算法给我带来了很多快乐!