查看: 25  |  回复: 0
  VBA代码 对排序 过程封转 返回排序后数组 ArrSort
楼主
发表于 2025年3月18日 15:06
Function ArrSort(arr)
    '对排序 过程封转 返回排序后数组
    Dim brr
    brr = arr
    QuickSort brr, LBound(brr), UBound(brr)
    ArrSort = brr
End Function

Sub QuickSort(tr, l&, U&)
    'tr为原始一维数组 L为排序起始下标 U为上标
    'EH论坛香川群子改进快速排序算法
    Dim i&, j&, x, t
    x = tr(l): i = l + 1: j = U
    Do
        Do While i < U
            If tr(i) > x Then Exit Do Else i = i + 1
        Loop
        Do While j > l
            If tr(j) < x Then Exit Do Else j = j - 1
        Loop
        If i < j Then t = tr(i): tr(i) = tr(j): tr(j) = t Else Exit Do
    Loop
    If j > l Then t = tr(l): tr(l) = tr(j): tr(j) = t: Call QuickSort(tr, l, j)
    If j + 1 < U Then Call QuickSort(tr, j + 1, U)
End Sub


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2025 MaNongKu.com