VB.Net/Data Structure/Sort

Материал из VB Эксперт
Версия от 12:45, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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.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