Snippet QuickSort Integer

Nestharus

o-o
Reaction score
83
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.
  • jonas jonas:
    where did you go?
  • The Helper The Helper:
    Jefferson TX on a Paranormal Investigation of a haunted bed and breakfast - I got some friends that are paranormal investigators and they have an RV and do YouTubes
    +1
  • The Helper The Helper:
    It was a lot of fun. The RV was bad ass
  • jonas jonas:
    That sounds like fun!
    +1
  • The Helper The Helper:
    it was a blast!
  • The Helper The Helper:
    I am going to post the Youtube of the investigation in the forums when it is ready
    +1
  • jonas jonas:
    cool!
  • vypur85 vypur85:
    Sounds cool TH.
  • tom_mai78101 tom_mai78101:
    I was on a Legend of Zelda marathon...
  • tom_mai78101 tom_mai78101:
    Am still doing it now
    +1
  • jonas jonas:
    which one(s) are you playing?
  • jonas jonas:
    I played a little bit of the switch title two weeks ago and found it quite boring
  • The Helper The Helper:
    just got back from San Antonio this weekend had the best Buffalo Chicken Cheesesteak sandwhich in Universal City, TX - place was called Yous Guys freaking awesome! Hope everyone had a fantastic weekend!
    +1
  • The Helper The Helper:
    Happy Tuesday!
  • The Helper The Helper:
    We have been getting crazy numbers reported by the forum of people online the bots are going crazy on us I think it is AI training bots going at it at least that is what it looks like to me.
  • The Helper The Helper:
    Most legit traffic is tracked on multiple Analytics and we have Cloud Flare setup to block a ton of stuff but still there is large amount of bots that seem to escape detection and show up in the user list of the forum. I have been watching this bullshit for a year and still cannot figure it out it is drving me crazy lol.
    +1
  • Ghan Ghan:
    Beep boop
    +1
  • The Helper The Helper:
    hears robot sounds while 250 bots are on the forum lol
  • The Helper The Helper:
    Happy Saturday!
    +1
  • The Helper The Helper:
    and then it was Thursday...
    +2
  • tom_mai78101 tom_mai78101:
    And then Monday
    +1
  • The Helper The Helper:
    I got the day off today!
    +1
  • tom_mai78101 tom_mai78101:
    How...? (T-T)
  • The Helper The Helper:
    I took the day off. I work for myself so I can do that.
    +1
  • Varine Varine:
    Well I'm already over summer

    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