注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

郭鹏飞 廊坊师范学院信息技术提高班十四期

 
 
 

日志

 
 

【转载】【VB学习】rnd函数详解以及随机数排序的方法  

2017-02-14 20:50:30|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近几天,我从新走了一遍课本,当走到随机选取10个两位数的题的时候,觉得和米老师当初讲的产生了共鸣!同时也发现了rnd的问题,因此先总结一下,增加自己的认识。

前提:回顾课本,百例

  通过回顾更深刻的理解了rnd的内容。

课本解释:Rnd函数用于返回或者说产生一个小于1但是大于或等于0的Single类型的随机数。

VB百例解释:该函数用于返回0~1之间的随机数,也称为随机数发生器。

格式 Rnd(number)

number<0                   每次都使用number作为随机数,得到相同结果。

        number>0      序列产出下一个随机数

number=0                    最近生成的数

省略                              序列中的下一个随机数

一.细节分析

从大体上分析VB,各种数据穿插在其中。

所以,VB为我们提供了初始化随机数生成器的语句Randomize,课本解释是自动使用系统时钟的值作为随机数产生器的“种子”值。我的理解是有了Randomize 可以让每次的值都是新的。

但是大多时候我们用rnd都是来得到一个区间的数,所以我把一些比较常用的rnd区间总结在下面:

生成[0,x)区间的随机Single类型的数据,使用表达式Rnd*x

生成[m,n)区间的随机Single类型的数据,使用表达式m+Rnd*(n-m)

生成[m,n]区间的随机整数,使用表达式m+int(Rnd*(n-m+1))或int(m+Rnd*(n-m+1))

生成一个随机的大写英文字母,使用表达式Chr(int(rnd*27)+65)

生成一个随机的小写英文字母,使用表达式Chr(int(rnd*27)+97)

二.排序的方法

常用的方法有“选择排序法”和“冒泡排序”

先介绍选择排序,

比如,我有10个数要比较大小。

第一轮:共需比较9次选出最大的,并把它存为a(1)

第二轮:出去a(1),剩下8个数,比较7次,得出第二大的数,存为a(2)

.......

依据上面方法,可以总结出任意的第i轮比较进行的操作是:从后n-i+1个数中选出最大者存入a(i),共须比较n-i次。

【VB学习】rnd函数详解以及随机数排序的方法 - 12期王雷 - 王雷 廊坊师范学院信息技术提高班十二期


冒泡排序(很出名的排序方法,很多的教材都有)
主要思想是“小数沉底,大数上浮”; 会涉及到冒泡排序最好的时间复杂度
 。

我的理解:
第一轮比较后,最小的数沉底,存为a(10)
第二轮比较a(1)~a(9),该轮最小的存为a(9)
....依次
最后比较a(1)和a(2),比较结束

 百科解释:

冒泡排序算法的运作如下:(从后往前)
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。


.举例及构思

       随机产生10个10~100之间的整数。使用“选择排序法”由大到小排序。

构思:我整体分成了两部分,①先随机数。用int(rnd*91)+10来选10个随机数,依次放入数组a()中  ②通过“选择排序法”和”冒泡法“来实现排序。


四.实现

【VB学习】rnd函数详解以及随机数排序的方法 - 12期王雷 - 王雷 廊坊师范学院信息技术提高班十二期

 


①先产生随机数

'********************************************
'名字:王雷
'说明:随机10个大于10小于100的数,由大到下排列
'时间:2015-1-11
'********************************************


'先产生10个随机数

Private Sub Form_Load()
Dim p As String, i As Integer
Randomize
p = ""
For i = 1 To 10
a(i) = Int(Rnd * 91) + 10 '产生随机数是关键语句,91是关键,[10,100]
p = p & a(i) & ","
Next i
Label1.Caption = LTrim(Left(p, Len(p) - 1)) 'ltrim 是删除p的左边的所有字符。
End Sub




②选择排序法

'********************************************
'名字:王雷
'说明:随机10个大于10小于100的数,由大到下排列
'时间:2015-1-11
'********************************************


Dim a(1 To 10) As Integer
'变换随机数
Private Sub Command1_Click()
Form_Load

End Sub
' 选择排序法从大到小排列。两个for把数组a(i)改写成从大到小的新数组a(i),然后再把a(i)显示在label2中。
Private Sub Command2_Click()
Dim i As Integer, j As Integer, p As String, t As Integer
p = ""
For i = 1 To 9
For j = i + 1 To 10
If a(i) < a(j) Then
t = a(i): a(i) = a(j): a(j) = t 'a(j)与a(i)的值进行交换。
End If
Next j
Next i
For i = 1 To 10
p = p & Str(a(i)) & ","
Next i
Label2.Caption = LTrim(Left(p, Len(p) - 1))

End Sub



③冒泡排序

'********************************************
'名字:王雷
'说明:随机10个大于10小于100的数,由大到下排列
'时间:2015-1-11
'********************************************


'变换随机数
Private Sub Command1_Click()
Form_Load
End Sub

Private Sub Command2_Click()
Dim p As String, i As Integer, j As Integer
p = ""
For i = 1 To 9
For j = 1 To 10 - i
If a(j) < a(j + 1) Then
t = a(j): a(j) = a(j + 1): a(j + 1) = t
End If
Next j
Next i
For i = 1 To 10
p = p & Str(a(i)) & ","
Next i
Label2.Caption = LTrim(Left(p, Len(p) - 1))
End Sub




五.小结

  为什么这莫好的方法自己没有想到?一个是因为自己不愿意去深思,还没开始就结束了。二是自己没有站在巨人的肩膀上,要想看到更漂亮的风景就要站的高;眼里看到的东西多了,也就自然会有更好的体会,更好的方法,就像米老师,他老人家身经百战,最后把本事传授给我们,我们没什么还不站在他老人家的肩膀上呢?总之就是巩固,大牢自己的基础!


 


  评论这张
 
阅读(30)| 评论(10)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017