title image


Smiley Re: Array mit vielen Mio Werten ordnen. Was ist die schnellste Variante?
Danke für die Hilfe,



klingt nach einer guten Idee! Bin in VBA aber nicht so bewandert, dass ich wüßte wie ich das jetzt in eine Datenbank wie Access bekomme(?).

Also das ist erst mal die Funktion, die das Array sortieren soll(habe ich nicht selbst geschrieben):





Function QuickSort( _

ByRef ArrayToSort As Variant, _

ByVal low As Long, _

ByVal high As Long)

Dim vPartition As Double, vTemp As Double

Dim i As Long, j As Long

If low > high Then Exit Function ' Rekursions-Abbruchbedingung

' Ermittlung des Mittenelements zur Aufteilung in zwei Teilfelder:

vPartition = ArrayToSort((low + high) \ 2)

' Indizes i und j initial auf die äußeren Grenzen des Feldes setzen:

i = low: j = high

Do

' Von links nach rechts das linke Teilfeld durchsuchen:

Do While ArrayToSort(i) < vPartition

i = i + 1



Loop

' Von rechts nach links das rechte Teilfeld durchsuchen:

Do While ArrayToSort(j) > vPartition

j = j - 1



Loop

If i <= j Then

' Die beiden gefundenen, falsch einsortierten Elemente

' austauschen:

vTemp = ArrayToSort(j)

ArrayToSort(j) = ArrayToSort(i)

ArrayToSort(i) = vTemp

i = i + 1

j = j - 1

End If

Loop Until i > j ' Überschneidung der Indizes

' Rekursive Sortierung der ausgewählten Teilfelder. Um die

' Rekursionstiefe zu optimieren, wird (sofern die Teilfelder

' nicht identisch groß sind) zuerst das kleinere

' Teilfeld rekursiv sortiert.

If (j - low) < (high - i) Then

QuickSort ArrayToSort, low, j

QuickSort ArrayToSort, i, high

Else

QuickSort ArrayToSort, i, high

QuickSort ArrayToSort, low, j

End If

QuickSort = ArrayToSort

End Function





Die Füllung des Arrays läuft in der HauptSub so ab:





Do While x <= lenght

y = x + 1

Do While y <= lenght

ReDim Preserve Slopearr(z)

Slopearr(z) = ((Dataarr(y) - Dataarr(x)) / ((y + 1) - (x + 1)))

z = z + 1

y = y + 1



Loop

x = x + 1

y = 0

Worksheets("Ergebnisse").Cells(1, 1) = x

Loop



' das Array sortieren

Slopearr() = QuickSort(Slopearr(), low, high)





Hier ist zu sagen, das Dataarr() Werte zwischen 4500 und 19000 annehemn kann. Faktisch soll jedes Element mit jedem Element, das im Index größer ist, verglichen werden (+noch eine Gefälleberechnung). Dabei ensteht dann dieser gigantische Array.

Ich hoffe, dass das jetzt ein bisschen besser zu verstehen ist und bedanke mich schon jetzt für Hilfe. (Quelltext wäre schön, falls vorhanden :-))





geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: