Public Sub QuickSort(sArr() As String, First As Long, Last As Long)
Dim vSplit As String, vT As String
Dim i As Long, j As Long, iRand As Long
If First < Last Then
If Last - First = 1 Then
If sArr(First) > sArr(Last) Then
vT = sArr(First): sArr(First) = sArr(Last): sArr(Last) = vT
End If
Else
iRand = Int(First + (Rnd * (Last - First + 1)))
vT = sArr(Last): sArr(Last) = sArr(iRand): sArr(iRand) = vT
vSplit = sArr(Last)
Do
i = First: j = Last
Do While (i < j) And (sArr(i) <= vSplit)
i = i + 1
Loop
Do While (j > i) And (sArr(j) >= vSplit)
j = j - 1
Loop
If i < j Then
vT = sArr(i): sArr(i) = sArr(j): sArr(j) = vT
End If
Loop While i < j
If (i - First) < (Last - i) Then
QuickSort sArr(), First, i - 1
QuickSort sArr(), i + 1, Last
Else
QuickSort sArr(), i + 1, Last
QuickSort sArr(), First, i - 1
End If
End If
End If
End Sub