Imports System
Public Class MainClass
Private Shared Values() As Integer
Private Const NUM_VALUES As Integer = 99
Shared Sub Main(ByVal args As String())
Dim random_number As New Random
Dim i As Integer
ReDim Values(NUM_VALUES)
For i = 0 To NUM_VALUES
Values(i) = random_number.Next(100, 1000)
Console.Write( Format$(Values(i)) & " " )
Next i
Console.WriteLine( "Sorted" )
' Sort the numbers.
Quicksort(Values, 0, NUM_VALUES)
For i = 0 To NUM_VALUES
Console.Write( Format$(Values(i)) & " " )
Next i
End Sub
' "Ready-to-Run Visual Basic Algorithms"
' (http://www.vb-helper.com/vba.htm).
Shared Public Sub Quicksort(ByVal list() As Integer, ByVal min As Integer, ByVal max As Integer)
Dim random_number As New Random
Dim med_value As Integer
Dim hi As Integer
Dim lo As Integer
Dim i As Integer
' If min >= max, the list contains 0 or 1 items so
' it is sorted.
If min >= max Then Exit Sub
' Pick the dividing value.
i = random_number.Next(min, max + 1)
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.
Do While list(hi) >= med_value
hi = hi - 1
If hi <= lo Then Exit Do
Loop
If hi <= lo Then
list(lo) = med_value
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
Do While list(lo) < med_value
lo = lo + 1
If lo >= hi Then Exit Do
Loop
If lo >= hi Then
lo = hi
list(hi) = med_value
Exit Do
End If
' Swap the lo and hi values.
list(hi) = list(lo)
Loop
' Sort the two sublists.
Quicksort(list, min, lo - 1)
Quicksort(list, lo + 1, max)
End Sub
End Class
|