English
Forum

aray or list (part-)sort

 

Michael
Wodrich
not forget: Arrays and lists having The Base zero.

QuickSort_List isn't for sortierte lists virtual.

Since I but more frequently The Listbox-list in a (sortierte)
list repacked have and then the whole again into
Gegenrichtung moving had to...

- the A u O around the Listbox-list To sort.

- too meaningfully, if in unsortierten lists
only one part the Entries sortiert go should.
CompileMarkSeparation
' (Teil-)Sortieren von Arrays
' ---------------------------
' QuickSort_Long Long_Array&[], min&, max&
' QuickSort_Str String_Array&[], min&, max&, CaseSense%
'    Wenn CaseSense ungleich Null ist, dann werden
'    die Strings als Lower$()-Werte verglichen.
' Teil-Sortieren von Listen
' -------------------------
' QuickSort_List ListHandle&, min&, max&, CaseSense%, IsNum%
'    Wenn ListHandle& = 0, dann Listbox-Liste.
'    Wenn IsNum ungleich Null ist, dann werden
'    die Werte mittels Val() verglichen -- sonst... --
'       Wenn CaseSense ungleich Null ist, dann werden
'       die Strings als Lower$()-Werte verglichen.
'=================================================
'=================================================
' (Teil-)Sortieren von Arrays
' ---------------------------
' QuickSort_Long Long_Array&[], min&, max&

Proc QuickSort_Long

    Parameters Arr&[], Low&, High&
    Declare i&, j&, hilf&, mitte&
    i& = Low&
    j& = High&
    mitte& = Arr&[@Int((Low& + High&) / 2)]

    While i& <= j&

        While Arr&[i&] < mitte&

            Inc i&

        EndWhile

        While Arr&[j&] > mitte&

            Dec j&

        EndWhile

        If i& <= j&

            hilf& = Arr&[i&]
            Arr&[i&] = Arr&[j&]
            Arr&[j&] = hilf&
            Inc i&
            Dec j&

        EndIf

    EndWhile

    If Low& < j&

        QuickSort_Long Arr&[], Low&, j&

    EndIf

    If i& < High&

        QuickSort_Long Arr&[], i&, High&

    EndIf

EndProc

' (Teil-)Sortieren von Arrays
' ---------------------------
' QuickSort_Str String_Array&[], min&, max&, CaseSense%
'    Wenn CaseSense ungleich Null ist, dann werden
'    die Strings als Lower$()-Werte verglichen.

Proc QuickSort_Str

    Parameters Arr$[], Low&, High&, CaseSense%
    Declare i&, j&, hilf$, mitte$

    Proc QS_GetStr$

        Parameters Wert$
        Return If( CaseSense% <> 0, Lower$(Wert$), Wert$ )

    EndProc

    i& = Low&
    j& = High&
    mitte$ = QS_GetStr$(Arr$[@Int((Low& + High&) / 2)])

    While i& <= j&

        While QS_GetStr$(Arr$[i&]) < mitte$

            Inc i&

        EndWhile

        While QS_GetStr$(Arr$[j&]) > mitte$

            Dec j&

        EndWhile

        If i& <= j&

            hilf$ = Arr$[i&]
            Arr$[i&] = Arr$[j&]
            Arr$[j&] = hilf$
            Inc i&
            Dec j&

        EndIf

    EndWhile

    If Low& < j&

        QuickSort_Str Arr$[], Low&, j&, CaseSense%

    EndIf

    If i& < High&

        QuickSort_Str Arr$[], i&, High&, CaseSense%

    EndIf

EndProc

' Teil-Sortieren von Listen
' -------------------------
' QuickSort_List ListHandle&, min&, max&, CaseSense%, IsNum%
'    Wenn ListHandle& = 0, dann Listbox-Liste.
'    Wenn IsNum ungleich Null ist, dann werden
'    die Werte mittels Val() verglichen -- sonst... --
'       Wenn CaseSense ungleich Null ist, dann werden
'       die Strings als Lower$()-Werte verglichen.

Proc QuickSort_List

    Parameters ListHandle&, Low&, High&, CaseSense%, IsNum%
    Declare i&, j&, hilfS$, mitteS$, hilfL&, mitteL&, tmp$

    Proc QS_Get

        Parameters Idx&, Ori%

        If Ori%

            Return GetString$(ListHandle&, Idx&)

        Else

            If IsNum%

                Return Val(GetString$(ListHandle&, Idx&))

            Else

                ' noch ein Sortiertrick - die Umlaute umsetzen
                tmp$ = GetString$(ListHandle&, Idx&)
                tmp$ = Translate$(tmp$,"Ä","Ae")
                tmp$ = Translate$(tmp$,"Ö","Oe")
                tmp$ = Translate$(tmp$,"Ü","Ue")
                tmp$ = Translate$(tmp$,"ä","ae")
                tmp$ = Translate$(tmp$,"ö","oe")
                tmp$ = Translate$(tmp$,"ü","ue")
                tmp$ = Translate$(tmp$,"ß","ss")
                Return If( CaseSense% <> 0, Lower$(tmp$), tmp$ )

            EndIf

        EndIf

    EndProc

    Proc QS_Put

        Parameters Idx&, Wert$
        ReplaceString(ListHandle&, Idx&, Wert$)

    EndProc

    i& = Low&
    j& = High&

    If IsNum%

        mitteL& = QS_Get(@Int((Low& + High&) / 2), 0)

    Else

        mitteS$ = QS_Get(@Int((Low& + High&) / 2), 0)

    EndIf

    While i& <= j&

        If IsNum%

            While QS_Get(i&,0) < mitteL&

                Inc i&

            EndWhile

            While QS_Get(j&,0) > mitteL&

                Dec j&

            EndWhile

        Else

            While QS_Get(i&,0) < mitteS$

                Inc i&

            EndWhile

            While QS_Get(j&,0) > mitteS$

                Dec j&

            EndWhile

        EndIf

        If i& <= j&

            hilfS$ = QS_Get(i&,1)
            QS_Put(i&, QS_Get(j&,1))
            QS_Put(j&, hilfS$)
            Inc i&
            Dec j&

        EndIf

    EndWhile

    If Low& < j&

        QuickSort_List ListHandle&, Low&, j&, CaseSense%, IsNum%

    EndIf

    If i& < High&

        QuickSort_List ListHandle&, i&, High&, CaseSense%, IsNum%

    EndIf

EndProc

'=================================================
' TEST TEST TEST TEST TEST TEST TEST TEST
cls
declare s$[], n&[]
print "Der Sortierbereich ist in Klammern angegeben:\n"
print " aus: Zitrone,Orange,Banane,Apfel   (0..3)\n"
print "wird:";
s$[] = explode("Zitrone,Orange,Banane,Apfel", ",")
QuickSort_Str s$[], 0, 3, 0

WhileLoop 0, SizeOf(s$[]) - 1

    Print " ";s$[&Loop];

EndWhile

Print "."
waitkey
print "\n\n aus: Zitrone,Orange,Banane,Apfel   (1..2)\n"
print "wird:";
s$[] = explode("Zitrone,Orange,Banane,Apfel", ",")
QuickSort_Str s$[], 1, 2, 0

WhileLoop 0, SizeOf(s$[]) - 1

    Case &Loop = 1 : Color 12,15
    Case &Loop = 3 : Color  0,15
    Print " ";s$[&Loop];

EndWhile

Print "."
waitkey
print "\n...jetzt LongInt...\n"
print " aus: 37;81;19;7;12;24;80   (0..6)\n"
print "wird:";
n&[0]=37:n&[1]=81:n&[2]=19:n&[3]=7:n&[4]=12:n&[5]=24:n&[6]=80
QuickSort_Long n&[], 0, 6

WhileLoop 0, SizeOf(n&[]) - 1

    Print " ";n&[&Loop];

EndWhile

Print "."
waitkey
print "\n\n aus: 37;81;19;7;12;24;80   (2..4)\n"
print "wird:";
n&[0]=37:n&[1]=81:n&[2]=19:n&[3]=7:n&[4]=12:n&[5]=24:n&[6]=80
QuickSort_Long n&[], 2, 4

WhileLoop 0, SizeOf(n&[]) - 1

    Case &Loop = 2 : Color 12,15
    Case &Loop = 5 : Color  0,15
    Print " ";n&[&Loop];

EndWhile

Print "."
waitkey
cls
print "\n...jetzt Listenbereich (3..7), danach Gesamt...\n"
print " aus: Emil,Dora,Cäsar,Berta,Ärger,Anton,Xaver,Franz,Friedrich,Helga,Otto,Paul\n"
print "wird:";
declare hliste&
hListe& = 0' Listbox-Liste
ClearList hListe&
MoveStrToList("Emil,Dora,Cäsar,Berta,Ärger,Anton,Xaver,Franz,Friedrich,Helga,Otto,Paul", ",")
QuickSort_List hListe&, 3, 7, 1, 0

WhileLoop 0, GetCount(hListe&) - 1

    Case &Loop = 3 : Color 12,15
    Case &Loop = 8 : Color  0,15
    Print " ";GetString$(hListe&, &Loop);

EndWhile

Print "."
waitkey
print "\n\n aus: Emil,Dora,Cäsar,Berta,Ärger,Anton,Xaver,Franz,Friedrich,Helga,Otto,Paul\n"
print "wird:";
ClearList hListe&
MoveStrToList("Emil,Dora,Cäsar,Berta,Ärger,Anton,Xaver,Franz,Friedrich,Helga,Otto,Paul", ",")
QuickSort_List hListe&, 0, (GetCount(hListe&) - 1), 1, 0

WhileLoop 0, GetCount(hListe&) - 1

    Print " ";GetString$(hListe&, &Loop=s2>);

EndWhile

Print "."
waitkey
End

Greeting
Michael Wodrich

P.s.:
The Posting is too in Paules-PC-Forum registered.
there the (part-)sort the Listbox-list but sure for all interestingly is...
 
XProfan X2
Windows (TM) Vista Ultimate, Core(TM) i7 920 @ 2.67GHz, 9206,26 MB

Programmieren, das spannendste Detektivspiel der Welt.
03/11/14  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

no Systemprofil laid out. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Please register circa a Posting To verfassen.
 

Topic-Options

3.989 Views

Untitledvor 0 min.
Sven Bader10/15/21
rafl02/16/19
Georg Teles02/13/16
Claus Müller09/14/14
More...

Themeninformationen

this Topic has 1 subscriber:

Michael Wodrich (1x)


Admins  |  AGB  |  Applications  |  Authors  |  Chat  |  Privacy Policy  |  Download  |  Entrance  |  Help  |  Merchantportal  |  Imprint  |  Mart  |  Interfaces  |  SDK  |  Services  |  Games  |  Search  |  Support

One proposition all XProfan, The there's!


My XProfan
Private Messages
Own Storage Forum
Topics-Remember-List
Own Posts
Own Topics
Clipboard
Log off
 Deutsch English Français Español Italia
Translations

Privacy Policy


we use Cookies only as Session-Cookies because of the technical necessity and with us there no Cookies of Drittanbietern.

If you here on our Website click or navigate, stimmst You ours registration of Information in our Cookies on XProfan.Net To.

further Information To our Cookies and moreover, How You The control above keep, find You in ours nachfolgenden Datenschutzerklärung.


all rightDatenschutzerklärung
i want none Cookie