Snippet QuickSort Integer

Nestharus

o-o
Reaction score
84
QSort optimized for integer comparisons (could put in compare and exchange methods to work with any type, but I personally needed integers so if someone wants to quickly mod this to use compare/exchange, go for it).

JASS:

library QSortI
    //static method sort takes integer size, boolean smallestToGreatest returns nothing
    //
    //Expects
    //  static integer array v
    module QSortI
        private static boolean y
        private static method is takes integer f, integer t returns nothing
            local integer i
            local integer j
            local integer m
            if (t>f) then
                set i=f+1
                loop
                    exitwhen i>t
                    set j=i
                    loop
                        exitwhen j<=f or (y and v[j]>v[j-1]) or (not y and v[j]<v[j-1])
                        set m=v[j]
                        set v[j]=v[j-1]
                        set v[j-1]=m
                        set j=j-1
                    endloop
                    set i=i+1
                endloop
            endif
        endmethod
        private static method s takes integer f, integer t returns nothing
            local integer p
            local integer a
            local integer i
            local integer m
            if (t>f) then
                if ((f+t)/2>t) then
                    set p=v[t]
                elseif ((f+t)/2>f) then
                    set p=v[(f+t)/2]
                else
                    set p=v[f]
                endif
            elseif ((f+t)/2>f) then
                set p=v[f]
            elseif ((f+t)/2>t) then
                set p=v[(f+t)/2]
            else
                set p=v[t]
            endif
            set a=t
            set i=f
            loop
                loop
                    exitwhen p>=v[a]
                    set a=a-1
                endloop
                loop
                    exitwhen p&lt;=v<i>
                    set i=i+1
                endloop
                if (i&lt;=a) then
                    if (i!=a) then
                        set m=v[a]
                        set v[a]=v<i>
                        set v<i>=m
                    endif
                    set a=a-1
                    set i=i+1
                endif
                exitwhen a&lt;i
            endloop
            if (IAbsBJ(a-f)&gt;10) then
                call s(f,a)
            else
                call is(f,a)
            endif
            if (IAbsBJ(t-i)&gt;10) then
                call s(i,t)
            else
                call is(i,t)
            endif
        endmethod
        static method sort takes integer z, boolean l returns nothing
            set y=l
            call s(0,z-1)
        endmethod
    endmodule
endlibrary
</i></i></i>


JASS:

struct Tester extends array
    private static integer array v
    private static integer array v2
    implement QSortI
    private static method onInit takes nothing returns nothing
        local integer i
        local integer m=9
        local string s
        set v[0]=5
        set v[1]=3
        set v[2]=6
        set v[3]=9
        set v[4]=4
        set v[5]=5
        set v[6]=12
        set v[7]=13
        set v[8]=4
        /////////////////////////////////////////////////////
        set v2[0]=3
        set v2[1]=4
        set v2[2]=4
        set v2[3]=5
        set v2[4]=5
        set v2[5]=6
        set v2[6]=9
        set v2[7]=12
        set v2[8]=13
        
        set i=m
        set s=&quot;&quot;
        loop
            exitwhen 0==i
            set i=i-1
            set s=I2S(v2<i>)+&quot;,&quot;+s
        endloop
        call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,s)
        
        call sort(m,true)
        
        set i=m
        set s=&quot;&quot;
        loop
            exitwhen 0==i
            set i=i-1
            set s=I2S(v<i>)+&quot;,&quot;+s
        endloop
        call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,60,s)
    endmethod
endstruct
</i></i>
 

Dirac

22710180
Reaction score
147
Don't be so lazy and add a compare method.

Also, if the module expects static integer array v, then why don't you just put it inside the module : /
 

Bribe

vJass errors are legion
Reaction score
67
Alternatively you could make a textmacro that allows the user to specify
the variable's privacy.
 

tooltiperror

Super Moderator
Reaction score
231
This documentation is virtually useless.
Doesn't have a compare method, making it useless as a template.
Disgusting interface.

Graveyarded.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top