Dobrý den, Potřebuji ve své aplikaci co nejrychlejší řazení(sortování) více- rozměrných polí. Je možné nějakým způsobem využít funkce které nabízí VB ? (array.sort). Potřebuji aby moje aplikace byla co nejrychlejší, ale bohužel možná i díky způsobu jakým sortuji je hrozně časově náročná. Potřebuji sortovat např. 2 rozměrné pole, které je Pole(0)= 1-2-3-4-5-6 Pole(1)= 0.5-0.3-0.8-0.2-0.1-0.4 Na Pole(0)= 2-1-4-3-5-6 Pole(1)= 0.3-0.5-0.2-0.8-0.1-0.4 Tzn. sortuji v blocích. Jedná se avšak např. o pole o velikosti v řádů stovek např. 10 „bloků“ po padesáti prvcích K tomu používám algoritmus na základu Quicksortu
Dim indexD As Long = 0
Dim indexH As Long = Tot_n_Jobs 'velikost bloku
Dim Chromosome_to_sort_T(1, Operations) As Integer
Call QSort(Chromosome_to_sort, indexD, indexH)
While indexH < Operations
indexD += (Tot_n_Jobs + 1)
indexH += (Tot_n_Jobs + 1)
Call QSort(Chromosome_to_sort, indexD, indexH)
End While
kde Qsort je
Public Sub QSort(ByVal Chromosome_to_sort As Object, ByVal indexD As Long, ByVal indexH As Long)
Dim pivot As Object
Dim tmpSwap(1) As Object
Dim indexD0 As Long
Dim indexH0 As Long
indexD0 = indexD 'přesun dat to pomocných proměnných
indexH0 = indexH
pivot = Chromosome_to_sort(1, (indexD + indexH) \ 2) 'volba pivotu
While (indexD0 <= indexH0)
While (Chromosome_to_sort(1, indexD0) < pivot And indexD0 < indexH) 'roztřídění tabulek vzhledem k pivotu
indexD0 = indexD0 + 1
End While
While (pivot < Chromosome_to_sort(1, indexH0) And indexH0 > indexD)
indexH0 = indexH0 - 1
End While
If (indexD0 <= indexH0) Then
For i As Integer = 0 To 1
tmpSwap(i) = Chromosome_to_sort(i, indexD0)
Chromosome_to_sort(i, indexD0) = Chromosome_to_sort(i, indexH0)
Chromosome_to_sort(i, indexH0) = tmpSwap(i)
Next i
indexD0 = indexD0 + 1
indexH0 = indexH0 - 1
End If
End While
If (indexD < indexH0) Then Call QSort(Chromosome_to_sort, indexD, indexH0)
If (indexD0 < indexH) Then Call QSort(Chromosome_to_sort, indexD0, indexH)
End Sub
A toto bohužel opakuji v řádu 10 000x-30 000 během celého výpočtu. Existuje nějaký lepší způsob jak tento sort provádět? Bude to pomocí VB funkcí rychlejší ? a jak je využít? Děkuji předem za odpověď.
|