016集——随机打乱并重新排序数组——vba实现

已知一个数组,将数组内容打乱并重新排序,可采用以下算法:

Sub 随机打乱排序数组()
'yngqq443440204@2024年4月1日09:52:06
 Randomize ' 初始化随机数生成器
    st = Timer
    Dim arr(0 To 100000) As Variant
    For i = 0 To 100000
        arr(i) = i
    Next
    For i = 0 To UBound(arr)
        j = i + Int((UBound(arr) - i + 1) * Rnd) '从第i个到最后一个数中随机选取一个数
        temp = arr(i) ' 交换第i个数与选取的数
        arr(i) = arr(j)
        arr(j) = temp
    Next i
    ot = Timer
    dt = ot - st
    MsgBox dt
        Stop
End Sub

 

由此可见,本案例排序10万个数,耗时不到0.02秒。

我们可将此算法设置为一个函数,重新排序数组直接调用函数即可:

Function 随机打乱排序数组(brr As Variant, number As Variant) As Variant
'yngqq443440114@1124年4月1日09:52:06
    Randomize ' 初始化随机数生成器
'    ReDim brr(0 To number) As Variant '数组内容全为空,不同于erase arr 删除数组
    crr = brr '定义crr变量预防brr打乱导致arr也打乱
    For i = 0 To UBound(crr)
        j = i + Int((UBound(crr) - i + 1) * Rnd) '从第i个到最后一个数中随机选取一个数
        temp = crr(i) ' 交换第i个数与选取的数
        crr(i) = crr(j)
        crr(j) = temp
    Next i
    随机打乱排序数组 = crr
End Function
Sub aa()
    number = 9
    Dim arr(): ReDim arr(0 To number) As Variant
    For i = 0 To number
        arr(i) = i
    Next
 result = 随机打乱排序数组(arr, number)
        Stop
End Sub

 

由此可见,数组已打乱重新排序。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值