Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
456to460
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
456to460
456to460
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Array sortieren

Array sortieren
24.07.2004 20:43:36
Jochen
Hallo Forum,
kann man eigenlich auch ein Array sortieren, dass so dimensioniert ist:
Dim dblArray(1 to 1000, 1 to 100) as Double
und wie geht das? Am besten wäre ein Beispielcode, weil ich mit VBA
erst anfange.
Gruß Jochen

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array sortieren
24.07.2004 21:04:43
Nepumuk
Hallo Jochen,
wenn's nicht mehr ist:


Option Explicit
Public Sub proc_fuellen()
    Dim dblArray(1 To 1000, 1 To 100) As Double
    Dim intZeilen As Integer, intSpalten As Integer
    For intSpalten = 1 To 1000
        For intZeilen = 1 To 100
            dblArray(intSpalten, intZeilen) = 101 - intZeilen
        Next
    Next
    Call proc_sortieren(1, 100, dblArray())
End Sub
Private Sub proc_sortieren(intUGrenze As Integer, intOGrenze As Integer, dblArray() As Double)
    Dim intIndex1 As Integer, intIndex2 As Integer, intSpalte As Integer
    Dim dblElement As Double, dblSpeicher As Double
    intIndex1 = intUGrenze
    intIndex2 = intOGrenze
    dblSpeicher = dblArray(1, Fix(intUGrenze + intOGrenze) / 2)
    Do
        Do While dblArray(1, intIndex1) < dblSpeicher
            intIndex1 = intIndex1 + 1
        Loop
        Do While dblSpeicher < dblArray(1, intIndex2)
            intIndex2 = intIndex2 - 1
        Loop
        If intIndex1 <= intIndex2 Then
            For intSpalte = 1 To 1000
                dblElement = dblArray(intSpalte, intIndex1)
                dblArray(intSpalte, intIndex1) = dblArray(intSpalte, intIndex2)
                dblArray(intSpalte, intIndex2) = dblElement
            Next
            intIndex1 = intIndex1 + 1
            intIndex2 = intIndex2 - 1
        End If
    Loop Until intIndex1 > intIndex2
    If intUGrenze < intIndex2 Then Call proc_sortieren(intUGrenze, intIndex2, dblArray())
    If intIndex1 < intOGrenze Then Call proc_sortieren(intIndex1, intOGrenze, dblArray())
End Sub


Gruß
Nepumuk
Anzeige
AW: Array sortieren
Jochen
Hallo Nepumuk,
tolle Sache, funktioniert natürlich, wie bei dir gewohnt. Leider
verstehe ich den Code nicht.
Gruß and Dank
Jochen
AW: Array sortieren
K.Rola
Hallo Meister,
ich hoffe, dir gehts gut?
Hat der Algorhitmus einen bestimmten Namen?
Gruß K.Rola
AW: Array sortieren
25.07.2004 06:31:22
Nepumuk
Hi K.Rola,
ich musste die letzten Wochen einen kranken Kollegen vertreten. D.h. 2 Telefone, 2 Handys, 3 Pc's und arbeiten von 6:30 bis 17:30 an sechs bis sieben Tage die Woche. Aber sonst geht's mir, abgesehen von ein paar Alterszipperlein, ganz gut. Danke der Nachfrage.
Das ganze ist eine Standardroutine und nennt sich Quick-Sort. In dem Beispiel, das einen geordneten Datenbestand sortiert, wäre der Insert-Sort eigentlich günstiger, weil schneller. Da ich aber nicht weiß, welche Daten Jochen in dem Array hat, habe ich die Methode gewählt, die für zufällige und umgekehrte Ordnung am schnellsten ist.
Gruß
Nepumuk
Anzeige
AW: Array sortieren
K.Rola
Hallo Nepumuk,
danke für die Nachhilfe. Hast du mal ein Beispiel für Insertion- Sort?
Der ist doch aber mehr was für kleinere Arrays, oder?
Gruß K.Rola
AW: Array sortieren
25.07.2004 10:50:58
Nepumuk
Liebste K.Rola,
für dich tu ich doch fast alles. Die Methode eignet sich auch für große Datenbestände.


Option Explicit
Option Base 0
'Deklaration eines Variant der das zusortierende Array aufnimmt.
'Das Array beinhaltet hier 16 Element (0 bis 15), wobei das erste
'als Hilfselement eingesetzt wird.
Dim SortArr As Variant
'Diese Prozedur initialisiert das Array mit den unsortierten Werten.
'Das Hilfselement SortArr(0) wird mit 0 initialisiert.
Sub Init_Arr(ByRef SortArr)
    SortArr = Array(0, 10, 3, 14, 5, 2, 13, 11, 9, 12, 1, 7, 15, 8, 4, 6)
End Sub
'Die Sortier-Prozedur Insert_Sort setzt den Sortieralgortihmus um.
Sub Insert_Sort(ByRef SortArr)
    Dim As Integer, j As Integer, Element As Integer
    'Durchlaufen der Array-Elemente mittels Schleife.
    For i = 2 To 15
        Element = SortArr(i)
        'Hilfselement wird als Zwischenspeicher eingesetzt.
        SortArr(0) = Element
        j = i - 1
        'Verschieben der Array-Elemente bis
        'kleineres Array-Element gefunden.
        Do While Element < SortArr(j)
           SortArr(j + 1) = SortArr(j)
           j = j - 1
        Loop
        'Array-Element einfügen.
        SortArr(j + 1) = Element
    Next i
End Sub
'Über diese Prozedur kann das Array zur Überprüfung ausgegeben werden.
Sub ArrAusgabe(Text As StringByRef SortArr)
    Dim As Integer
    Dim SortArrStr As String
    
    SortArrStr = Text & SortArr(1)
    For i = 2 To 15
        SortArrStr = SortArrStr & ", " & SortArr(i)
    Next i
    MsgBox SortArrStr
End Sub
'Die Hauptprozedur führt die vorab aufgeführten Prozeduren aus.
Sub Insert_Sort_Test()
    Call Init_Arr(SortArr)
    Call ArrAusgabe("Unsortiert: ", SortArr)
    Call Insert_Sort(SortArr)
    Call ArrAusgabe("Sortiert: ", SortArr)
End Sub


Gruß
Nepumuk
Anzeige
AW: Array sortieren
K.Rola
Hallo Schmeichler,
danke, das ist ein sehr schön anschauliches Beispiel, das versteh
ich sogar.
Gruß K.Rola

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige