vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Hierarchisches Sortieren eines 2D-Array (Quicksort) 
Autor: Manfred X
Datum: 25.12.09 17:53

Teil 2: Quicksort-Routine

        Public Function QuickSort_ArrayColumn _
            (ByRef Array_To_Sort As Variant, _
            ByVal SortColumn_Index As Long, _
            Optional ByVal FirstRow_ToSort As Long = -10000000, _
            Optional ByVal LastRow_ToSort As Long = -100000000, _
            Optional ByVal SortAscending As Boolean = True, _
            Optional ByRef ErrorMessage As String) As Boolean
 
            'Quicksort: Array nach 1. Dimension (Zeilen) gemäß einem
            'Index in 2. Dimension (Spalte) sortieren
            'optional: nur einen Abschnitt (FirstRow-,LastRow_ToSort) sortieren
            'optional: ansteigend oder fallend sortieren
            'optional Fehlermeldung zurückgeben
 
            Err.Clear
            On Error GoTo errorexit
 
            If VarType(Array_To_Sort) < vbArray Then
                QuickSort_ArrayColumn = "Kein Array als Parameter übergeben"
                Exit Function
            End If
 
            If SortColumn_Index < LBound(Array_To_Sort, 2) Or _
               SortColumn_Index > UBound(Array_To_Sort, 2) Then
                ErrorMessage = "Spalten-Index ausserhalb Array-Grenzen"
                Exit Function
            End If
 
            'Zufallszahlen für Aufteilungsindex initialisieren
            Randomize Timer
 
            'Arraygrenzen anfragen
            Dim FirstCol_Array As Long: FirstCol_Array = LBound(Array_To_Sort, _
              2)
            Dim LastCol_Array As Long: LastCol_Array = UBound(Array_To_Sort, 2)
            Dim FirstRow_Array As Long: FirstRow_Array = LBound(Array_To_Sort, _
              1)
            Dim LastRow_Array As Long: LastRow_Array = UBound(Array_To_Sort, 1)
 
            ' Wird die Bereichsgrenze nicht angegeben,
            ' werden alle Arrayzeilen anhand der Spalte sortiert
            If FirstRow_ToSort < FirstRow_Array Then FirstRow_ToSort = _
              FirstRow_Array
            If LastRow_ToSort < FirstRow_ToSort Or _
            LastRow_ToSort > LastRow_Array Then LastRow_ToSort = LastRow_Array
 
            If FirstRow_ToSort > LastRow_ToSort Then
                ErrorMessage = "Ungeeignete Bereichsangabe"
                Exit Function
            End If
 
            Dim i, j As Long: i = FirstRow_ToSort: j = LastRow_ToSort
            Dim x_part As Variant 'Aufteilungswert
            'Array-Element am zufällig ausgewählten Aufteilungsindex lesen
            x_part = _
            Array_To_Sort(RandomLong(FirstRow_ToSort, LastRow_ToSort), _
            SortColumn_Index)
 
            ' Array aufteilen
            Do
                If SortAscending Then
                    While Array_To_Sort(i, SortColumn_Index) < x_part
                        i = i + 1
                    Wend
                    While Array_To_Sort(j, SortColumn_Index) > x_part
                        j = j - 1
                    Wend
                Else
                    While Array_To_Sort(i, SortColumn_Index) > x_part
                        i = i + 1
                    Wend
                    While Array_To_Sort(j, SortColumn_Index) < x_part
                        j = j - 1
                    Wend
                End If
 
                If (i <= j) Then
                    ' Wertepaare miteinander tauschen
                    Call SwapArrayRow(Array_To_Sort, i, j)
                    i = i + 1: j = j - 1
                End If
            Loop Until (i > j)
 
            'rekursiver Quicksort
            If (FirstRow_ToSort < j) Then
                If Not QuickSort_ArrayColumn(Array_To_Sort, _
                SortColumn_Index, FirstRow_ToSort, j, SortAscending, _
                ErrorMessage) Then
                    Exit Function
                End If
            End If
            If (i < LastRow_ToSort) Then
                If Not QuickSort_ArrayColumn(Array_To_Sort, _
                    SortColumn_Index, i, LastRow_ToSort, SortAscending, _
                    ErrorMessage) Then
                   Exit Function
                End If
            End If
 
            'Korrektes Ende der Rekursiven Funktion
            ErrorMessage = "": QuickSort_ArrayColumn = True: Exit Function
 
errorexit:
            ErrorMessage = Err.Description
        End Function
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Mehrdimensionales Array mehrfach sortieren5.395FISO23.12.09 05:23
Re: Mehrdimensionales Array mehrfach sortieren4.677Zardoz23.12.09 05:37
Re: Mehrdimensionales Array mehrfach sortieren4.418FISO23.12.09 06:35
Re: Mehrdimensionales Array mehrfach sortieren4.609Dirk23.12.09 09:58
Re: Mehrdimensionales Array mehrfach sortieren4.397FISO23.12.09 22:24
Re: Mehrdimensionales Array mehrfach sortieren4.372Dirk24.12.09 00:32
Re: Mehrdimensionales Array mehrfach sortieren4.572FISO24.12.09 00:38
Re: Mehrdimensionales Array mehrfach sortieren4.632Danzi28.12.09 09:07
Re: Mehrdimensionales Array mehrfach sortieren4.790FISO29.12.09 08:21
Re: Mehrdimensionales Array mehrfach sortieren4.666Rippler29.12.09 16:59
Re: Mehrdimensionales Array mehrfach sortieren4.438Dirk29.12.09 19:13
Re: Mehrdimensionales Array mehrfach sortieren4.497Dirk29.12.09 19:19
Re: Mehrdimensionales Array mehrfach sortieren4.719Dirk29.12.09 19:13
Re: Mehrdimensionales Array mehrfach sortieren4.796Manfred X24.12.09 07:55
Demo-Code: Hierarchisches Sortieren eines 2D-Array (Hilfsfun...4.685Manfred X25.12.09 17:51
Hierarchisches Sortieren eines 2D-Array (Quicksort)5.245Manfred X25.12.09 17:53
Re: Hierarchisches Sortieren eines 2D-Array (HierarchicSort)4.660Manfred X25.12.09 17:56
Re: Hierarchisches Sortieren eines 2D-Array (Beispiel)4.790Manfred X25.12.09 18:08
Re: Hierarchisches Sortieren eines 2D-Array (Beispiel)4.580FISO26.12.09 00:03

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel