Sortování vícerozměrných polí s vnitřními bloky (Visual Basic Studio 2005 Express Edition)   otázka

VB.NET

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ěď.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback