Español
Fuente/ Codesnippets

Array rasch indexieren: QUICKDEX

 

p.specht

Weil physisches sortieren en Datenbanken heutzutage mega-out es, hier mi Versión uno Quicksort-basierten en- o. absteigenden INDEXERS como Proc.
(En Datenbanken dauert physisches Sortieren simplemente viel demasiado tiempo. Neue Einträge voluntad por lo tanto al Ende angefügt y lediglich el Index adaptado. Ähnlich simplemente es entonces logisches Löschen: Man überspringt el entsprechenden Index simplemente en el Verlinkungsliste)

Anmerkung: Der einleitende Hauptteil dient lediglich el Zeitnehmung. Binnen 3 Sekunden dejar se en Float-Arrays compiliert rund 9600 Indexe aufsteigend o. 9100 Indexierungen absteigend erzeugen. Der Algorithmus debería relativ ligeramente en Stringarrays a modifizieren ser, wobei el Leistung natürlich algo sinken se.
Título de la ventana " Quickdex, el QuickSort-Up/Down Indexer"
'(CL) CopyLeft 2014-10 by P.Pájaro carpintero, Wien; sin jede Gewähr!
'{Quickdex, una QuickSort-Up/Down Indexer para kleine Datenbestände
'----------------------------------------------------------------------------------------
' Dieser Hauptteil se el Tiempo para linear ansteigende Element-Anzahl zeigen...
Ventana de Estilo 24:Ventana 0,0-%maxx,%maxy-40
declarar n&,x![],y![],k![],v&[],xm!,ym!,tm&:Conjunto("decimals",17):randomize
Test:
n&=n& + 100'<< Inkrement el Elemente-Anzahl (para Testen des Zeitverhaltens)
':::imprimir "\n Setup de ";n&,"zu sortierenden Random-Floatwerten se ejecuta..."
clear x![],y![],k![],v&[],xm!,ym!:setSize x![],n&:setsize y![],n&
x![]=rnd(height(%hwnd)):y![]=rnd(height(%hwnd))
':::Imprimir " Indexier-Kriterium se producido ..."
setsize k![],n&'Sortierkriteriums
setsize v&[],n&'Ergebnis: Index para cada einzelne Sortierkriteriums-Element
' Schwerpunkt

whileloop 0,n&-1:xm!=xm!+x![&Loop]:ym!=ym!+y![&Loop]:endwhile :xm!=xm!/n&:ym!=ym!/n&

    ' Kriterium sei el Punkt-Distanz para Schwerpunkt

    whileLoop 0,n&-1:k![&Loop]=sqr(x![&Loop]-xm!)+sqr(y![&Loop]-ym!):endwhile'Kriterium k![]

        '----------------------------------------------------------------------------------------
        ':::imprimir " Indexiervorgang comenzó... "
        'tm&=&gettickcount:v&[]=QuickIndexUp9600(k![])
        tm&=&gettickcount:v&[]=QuickIndexDwn9100(k![])
        '----------------------------------------------------------------------------------------
        tm&=&gettickcount-tm&:set("decimals",3)':Título de la ventana str$(tm&/1000)+" sec":sound 2000,200
        :::imprimir " Indexieren von",n&,"Elementen final en "+str$(tm&/1000)+" sec":set("decimals",17)
        ':waitinput 10000

        whileloop 0,n&-1

            '::: imprimir tab(3);right$("     "+str$(&Loop),6);tab(17);format$("%g",k![v&[&Loop]]);
            '::: imprimir tab(40);format$("%g",x![v&[&Loop]]);tab(70);format$("%g",y![v&[&Loop]])
            '----------------------------------------------------------------------------------------
            '2 PRÜFZEILEN GEBEN ALARM WENN SORTIERUNG NICHT ...<..aufsteigend ...>..absteigend:

            if &bucle>1:if k![v&[&Loop]]  >  k![v&[&Loop-1]]:Imprimir "\n *** PRÜFREIHENFOLGE FALSCH! *** "

                sound 2000,500:waitinput :endif :endif
                '----------------------------------------------------------------------------------------

            endwhile'::: waitinput 60000

            GOTO "Test"
            '}

            proc QuickIndexUp9600 :parámetros a![]:declarar n&,p&,l&,r&,s&,sl&[],sr&[],w!,t&,x!,i&,j&,v&[]

                n&=sizeof(a![]):setsize v&[],n&:v&[]=&Index:s&=1:sl&[1]=0:sr&[1]=n&-1

                mientras que s&>0:l&=sl&[s&]:r&=sr&[s&]:s&=s&-1:mientras que l&<r&:i&=l&:j&=r&:p&=(l&+r&)\2

                    if a![v&[l&]]>a![v&[p&]] :t&=v&[l&]:v&[l&]=v&[p&]:v&[p&]=t&:endif

                        if a![v&[l&]]>a![v&[r&]] :t&=v&[l&]:v&[l&]=v&[r&]:v&[r&]=t&:endif

                            if a![v&[p&]]>a![v&[r&]] :t&=v&[p&]:v&[p&]=v&[r&]:v&[r&]=t&:endif :x!=a![v&[p&]]

                                mientras que i&<=j&:mientras que a![v&[i&]]<x!:inc i&:endwhile :mientras que x!<a![v&[j&]]:dec j&:endwhile

                                    if i&<=j&:t&=v&[i&]:v&[i&]=v&[j&]:v&[j&]=t&: inc i&:dec j&:endif :endwhile

                                        if (j&-l&)<(r&-i&):if i&<r&:s&=s&+1:sl&[s&]=i&:sr&[s&]=r&:endif :r&=j&:más

                                            if l&<j&:s&=s&+1:sl&[s&]=l&:sr&[s&]=j&:endif :l&=i&:endif :endwhile :endwhile :volver v&[]

                                            ENDPROC

                                            proc QuickIndexDwn9100 :parámetros a![]:declarar n&,p&,l&,r&,s&,sl&[],sr&[],w!,t&,x!,i&,j&,v&[]

                                                n&=sizeof(a![]):s&=1:setsize v&[],n&:v&[]=&index:s&=1:sl&[1]=0:sr&[1]=n&-1

                                                mientras que s&>0:l&=sl&[s&]:r&=sr&[s&]:s&=s&-1:mientras que l&<r&:i&=l&:j&=r&:p&=(l&+r&)\2

                                                    if a![v&[l&]]>a![v&[p&]]:t&=v&[l&]:v&[l&]=v&[p&]:v&[p&]=t&:endif

                                                        if a![v&[l&]]>a![v&[r&]]:t&=v&[l&]:v&[l&]=v&[r&]:v&[r&]=t&:endif

                                                            if a![v&[p&]]>a![v&[r&]]:t&=v&[p&]:v&[p&]=v&[r&]:v&[r&]=t&:endif :x!=a![v&[p&]]

                                                                mientras que i&<=j&:mientras que a![v&[i&]]>x!:inc i&:endwhile :mientras que x!>a![v&[j&]]:dec j&:endwhile

                                                                    if i&<=j&:t&=v&[i&]:v&[i&]=v&[j&]:v&[j&]=t&:inc i&:dec j&:endif :endwhile

                                                                        if (j&-l&)<(r&-i&):if i&<r&:inc s&:sl&[s&]=i&:sr&[s&]=r&:endif :r&=j&:más

                                                                            if l&<j&:inc s&:sl&[s&]=l&:sr&[s&]=j&:endif :l&=i&:endif :endwhile :endwhile :volver v&[]

                                                                            ENDPROC

 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
30.04.2021  
 



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

591 Views

Untitledvor 0 min.
ScanMaster25.06.2024
ecki30.07.2023
Ernst21.07.2021
Uwe ''Pascal'' Niemeier13.06.2021
Más...

Themeninformationen

Dieses Thema ha 1 subscriber:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie