Mega Code Archive

 
Categories / VB.Net / Data Structure
 

Quick Sort Demo

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