VB.Net/Data Structure/Sort

Материал из VB Эксперт
Перейти к: навигация, поиск

Quick Sort Demo

<source lang="vbnet"> 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.ru/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

      </source>