桶排序—想说对你爱不完

前言

    说算法前,一定要说的一件事就是:比你优秀,比你努力的大有人在,米老师就是,剩下的就不说了,自己体会吧。

    桶排序,让我明白了什么是大道至简。经过几天的上课,自己也渐渐的对算法产生了兴趣,红利是运行成功的那一刻心情是美好的。


规则

    对于一种算法,常常我们一下子很难写出代码,这之间需要一个过程,对算法的规则的研究以及自己对算法这个过程的描述。
    桶排序大道至简在哪里呢?他的原理是这样的,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

结语 

    桶排序让我感受到了算法的快乐,不过他也是有局限性的,就是桶排序会造成有的桶没有用上,造成一定的空间浪费,当然不可否认,桶排序的速度很快的,总之,这个算法给我带来了很多快乐!
        
    

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值