产生10个不重复的随机数并排序、选最大

本文介绍使用VBA实现产生不重复随机数的方法,并演示如何使用冒泡排序、选择排序和插入排序对数组进行排序。此外,还展示了如何找出数组中的最大值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【效果展示】


【代码展示】

Dim c As Integer

Dim t As Integer
Dim flag As Integer
Dim a(9) '拓展:可以申明动态数组a(k),通过inputbox自定义数组中的个数,注意要redim
Dim p As String


Private Sub Command1_Click() '产生不重复的随机数事件
Dim i As Integer
p = ""
Label1.Caption = ""

a(0) = Int(100 * Rnd + 1)

'产生[1,100]之间的随机整数。拓展:若产生[m,n]之间的随机整数,为Int((n-m)*Rnd+m+1),可以通过inputbox自定义m和n。

'第一个数不用考虑是否会重复,特殊情况特殊处理


For i = 1 To 9 '从产生第二个数开始检查是否重复
c = Int(100 * Rnd + 1)
flag = 1 '不重复,树标杆,用1标记不重复

For t = 0 To i - 1 '产生的第i个数和它前面的数进行比较,判断是否重复
If a(t) = c Then
i = i - 1 '如果相同,则该数作废,重新产生第i个数
flag = 0 '用0标记重复
Exit For '发现重复,则立即停止查重复过程,提高程序的效率
End If
Next t

If flag = 1 Then
a(i) = c '将产生的不重复的随机数赋给数组
End If
Next i

For i = 0 To 9
p = p & " " & a(i) '将产生的随机数放到一起
Next i
Label1.Caption = p '显示产生的随机数
End Sub

Private Sub Command2_Click() '将产生的数进行排序

p = ""


Dim j As Integer
Dim i As Integer
Dim temp As Integer

'----------冒泡排序 每次选最大-------

' For i = 1 To 9
' For j = 0 To 9 - i
' If a(j) > a(j + 1) Then
' temp = a(j)
' a(j) = a(j + 1)
' a(j + 1) = temp
' End If
' Next j
' Next i
原理及思想】'将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。冒泡排序是就地排序,且它是稳定的。


'动画展示冒泡排序过程http://www.cnblogs.com/gansc23/archive/2010/12/15/1859981.html


'----------选择排序 每次选最小--------------
' Dim min_index As Integer
' For i = 0 To 8
' min_index = i
' For j = i + 1 To 9
' If a(j) < a(min_index) Then
' min_index = j
' End If
' If min_index <> i Then
' temp = a(i)
' a(i) = a(min_index)
' a(min_index) = temp
' End If
'min_index = i
' Next j
' Next i
原理及思想对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现在变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。
图片示范
  



'-------------插入排序----------------
For i = 1 To 9
For j = 0 To i - 1
If a(i) < a(j) Then
temp = a(i)
a(i) = a(j)
a(j) = temp
End If
Next j

Next i

图片示范:


'--------------------------------------


For i = 0 To 9 '显示从小到大排序的结果
p = p & " " & a(i)
Next i

Label2.Caption = p

End Sub


Private Sub Command3_Click() '从不重复的10个数中选出最大的

Dim max As Integer
max = a(0) '假设第一个数最大,思想很重要

For i = 1 To 9

If a(i) > max Then '第2---9个数依次和不断更新的max比较,谁大则成为max
max = a(i)
End If
Next i

Label3.Caption = max

End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值