Private Sub QuicksortUDT(list() As SOMETHING, ByVal min As Integer, ByVal max As Integer)
Dim med_value As SOMETHING
Dim hi As Integer
Dim lo As Integer
Dim i As Integer
' If the list has no more than CutOff elements,
' finish it off with SelectionSort.
If max <= min Then Exit Sub
' Pick the dividing value.
i = Int((max - min + 1) * Rnd + min)
med_value = list(i)
' Swap it to the front.
list(i) = list(min)
lo = min
hi = max
Do
' Look down from hi for a value < med_value.
'COMPARISON
Do While list(hi).num>= med_value.num
hi = hi - 1
If hi <= lo Then Exit Do
Loop
If hi <= lo Then
list(lo).num= med_value.num
Exit Do
End If
' Swap the lo and hi values.
list(lo) = list(hi)
' Look up from lo for a value >= med_value.
lo = lo + 1
'COMPARISON
Do While list(lo).num< med_value.num
lo = lo + 1
If lo >= hi Then Exit Do
Loop
If lo >= hi Then
lo = hi
list(hi).num= med_value.num
Exit Do
End If
' Swap the lo and hi values.
list(hi) = list(lo)
Loop
' Sort the two sublists.
QuicksortUDT list(), min, lo - 1
QuicksortUDT list(), lo + 1, max
End Sub