Sub quickSort(ByRef aryVal As Variant, Optional ByVal left As Long = -1, _
Optional ByVal right As Long = -1)
Dim l As Long
Dim r As Long
Dim pivot As Variant
Dim tmp As Variant
If left = -1 Or right = -1 Then
left = LBound(aryVal)
right = UBound(aryVal)
End If
l = left
r = right
pivot = aryVal(Int((left + right) / 2))
Do
Do While aryVal(l) < pivot
l = l + 1
Loop
Do While aryVal(r) > pivot
r = r - 1
Loop
If l >= r Then Exit Do
tmp = aryVal(l)
aryVal(l) = aryVal(r)
aryVal(r) = tmp
l = l + 1
r = r - 1
Loop
If (left < l - 1) Then
Call quickSort(aryVal, left, l - 1)
End If
If (right > r + 1) Then
Call quickSort(aryVal, r + 1, right)
End If
End Sub
Sub bubbleSort(ByRef aryVal As Variant)
Dim i As Long
Dim j As Long
Dim tmp As Variant
For i = 0 To UBound(aryVal)
For j = UBound(aryVal) To i Step -1
If aryVal(i) > aryVal(j) Then
tmp = aryVal(i)
aryVal(i) = aryVal(j)
aryVal(j) = tmp
End If
Next j
Next i
End Sub
Sub test()
Dim aryQuick() As Variant: ReDim aryQuick(0)
Dim aryBubble() As Variant: ReDim aryBubble(0)
Dim i As Long
For i = 0 To 10000
ReDim Preserve aryQuick(UBound(aryQuick) + 1)
aryQuick(UBound(aryQuick)) = Int(Rnd * 10000)
ReDim Preserve aryBubble(UBound(aryBubble) + 1)
aryBubble(UBound(aryBubble)) = Int(Rnd * 10000)
Next i
Debug.Print Now()
Call quickSort(aryQuick)
Debug.Print Now()
Call bubbleSort(aryBubble)
Debug.Print Now()
End Sub