Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
660to664
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
660to664
660to664
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Sortierte Collection aufbauen - optimaler?

Sortierte Collection aufbauen - optimaler?
01.09.2005 01:21:52
Stephan
Ich habe eine Lösung (siehe unten) aber geht es mit einer anderen Loop eleganter = weniger ifs" bzw schnellere Ausführzeit?
Prinzip:
Der Funktion werden einzelne Daten übergeben, die in eine "static" collection aufsteigend eingeordnet werden sollen.
### Modul ###
Option Explicit
Private aCol As New Collection
### Sub ###

Private Sub AddDate(ByRef aDate As clsDate)
Dim i, count As Integer
count = aCol.count
If count = 0 Then
aCol.Add aDate
Else
For i = 1 To count
If aDate.theDate < aCol.Item(i).theDate Then
aCol.Add Item:=aDate, Before:=i
Exit For
End If
Next
If i = count + 1 Then
aCol.Add aDate
End If
End If
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sortierte Collection aufbauen - optimaler?
01.09.2005 10:01:39
Rolf
Hallo Stephan,
schau mal, ob dir das hilft
fG
Rolf

Sub test_collectionsort()
Dim coldates As Collection
Set coldates = New Collection
Dim A As Variant
Dim i As Long
Dim e
A = Array(CDate("10.10.04"), CDate("1.1.03"), CDate("15.9.05"), CDate("1.9.05"))
Call QuickSort_Feld(A, 0, UBound(A), False)
For i = 0 To UBound(A)
coldates.Add A(i)
Next
For Each e In coldates
Debug.Print e
Next
End Sub


Sub QuickSort_Feld(DasFeld, StartUnten, EndeOben, Absteigend As Boolean)
'QuickSort Standard / Peter Haserodt
Dim iUnten As Long, iOben, iMitte, y
iUnten = StartUnten
iOben = EndeOben
iMitte = DasFeld((StartUnten + EndeOben) / 2)
While (iUnten <= iOben)
If Not Absteigend Then
While (DasFeld(iUnten) < iMitte And iUnten < EndeOben)
iUnten = iUnten + 1
Wend
While (iMitte < DasFeld(iOben) And iOben > StartUnten)
iOben = iOben - 1
Wend
Else
While (DasFeld(iUnten) > iMitte And iUnten < EndeOben)
iUnten = iUnten + 1
Wend
While (iMitte > DasFeld(iOben) And iOben > StartUnten)
iOben = iOben - 1
Wend
End If
If (iUnten <= iOben) Then
y = DasFeld(iUnten)
DasFeld(iUnten) = DasFeld(iOben)
DasFeld(iOben) = y
iUnten = iUnten + 1
iOben = iOben - 1
End If
Wend
If (StartUnten < iOben) Then Call QuickSort_Feld(DasFeld, StartUnten, iOben, Absteigend)
If (iUnten < EndeOben) Then Call QuickSort_Feld(DasFeld, iUnten, EndeOben, Absteigend)
End Sub

Anzeige
AW: Sortierte Collection aufbauen - optimaler?
01.09.2005 17:21:26
Stephan
Hallo Rolf,
vielen Dank für deine Unterstützung. Küzer ist deine Routine ja nicht gerade aber ich habe beide Ansätze mal unter vergleichbaren Bedingungen auf Zeit gestet und da ist der Quicksort bei großen Mengen um ein Vielfaches schneller. Beispielsweise bei Tausend Daten 36x schneller. Bei 2000 Daten 150X schneller usw.
Noch einmal vielen Dank
Viele Grüße
Stephan
AW: Sortierte Collection aufbauen - optimaler?
01.09.2005 17:32:12
Rolf
Hallo Stephan,
bei kleinem Datenvolumen ist deine Routine sicher ausreichend -
anderenfalls stellt sich ohnehin die Frage, ob du nicht,
statt mit Kollektionen, lieber gleich mit Arrays arbeitest.
hG
Rolf
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige