快速排序法 QuickSort

 

Attribute VB_Name = "Module4"
'快速排序法
Private Function QuickSort(ArrayToSort() As String) As Boolean
    IterateSort ArrayToSort, LBound(ArrayToSort()), UBound(ArrayToSort())
End Function

'快速排序法
 Sub IterateSort(ArrayToSort() As String, ByVal StartElement As Long, ByVal EndElement As Long)
    Dim HoldValue As String
    Dim WorkEnd As Long, WorkStart As Long, RandomPoint As Long
    Dim SortOK As Boolean

    If EndElement <= StartElement Then '溢出
        Exit Sub
    End If

    WorkStart = StartElement
    WorkEnd = EndElement
    RandomPoint = Int((WorkEnd - WorkStart + 1) * Rnd + WorkStart)
    HoldValue = ArrayToSort(RandomPoint)
    ArrayToSort(RandomPoint) = ArrayToSort(WorkStart)
    SortOK = True
    Do While SortOK
        Do While ArrayToSort(WorkEnd) >= HoldValue
            WorkEnd = WorkEnd - 1
            If WorkEnd <= WorkStart Then
                Exit Do
            End If
        Loop
        If WorkEnd <= WorkStart Then
            ArrayToSort(WorkStart) = HoldValue
            Exit Do
        End If

        ' 交换
        ArrayToSort(WorkStart) = ArrayToSort(WorkEnd)
        WorkStart = WorkStart + 1
        Do While ArrayToSort(WorkStart) < HoldValue
            WorkStart = WorkStart + 1
            If WorkStart >= WorkEnd Then
                Exit Do
            End If
        Loop
        If WorkStart >= WorkEnd Then
            WorkStart = WorkEnd
            ArrayToSort(WorkEnd) = HoldValue
            Exit Do
        End If
        ArrayToSort(WorkEnd) = ArrayToSort(WorkStart)
    Loop
    IterateSort ArrayToSort(), StartElement, (WorkStart - 1)
    IterateSort ArrayToSort(), (WorkStart + 1), EndElement
End Sub

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值