Sorting algorithms/Cycle sort: Difference between revisions

m (→‎{{header|REXX}}: change literal delimiters.)
Line 16:
* [http://www.youtube.com/watch?v=ZSJGf5Ngw18 Youtube] Visualization and audibilization of Cycle Sort algorithm.
<br><br>
 
=={{header|360 Assembly}}==
{{trans|NetRexx}}
The program uses ASM structured macros and two ASSIST macros to keep the code as short as possible.
<lang 360asm>
* Cycle sort 26/06/2016
CYCLESRT CSECT
USING CYCLESRT,R13 base register
B 72(R15) skip savearea
DC 17F'0' savearea
STM R14,R12,12(R13) prolog
ST R13,4(R15) "
ST R15,8(R13) "
LR R13,R15 "
LA RJ,1 jcycle=1
L R2,N n
BCTR R2,0 n-1
ST R2,NM1 nm1=n-1
DO WHILE=(C,RJ,LE,NM1) do jcycle=1 to n-1
LR R1,RJ jcycle
SLA R1,2 .
L RM,A-4(R1) item=a(jcycle)
LR RK,RJ kpos=jcycle /*find{*/
LA RI,1(RJ) i=jcycle+1
DO WHILE=(C,RI,LE,N) do i=jcycle+1 to n
LR R1,RI i
SLA R1,2 .
L R2,A-4(R1) a(i)
IF CR,R2,LT,RM THEN if a(i)<item then
LA RK,1(RK) kpos=kpos+1
ENDIF , end if
LA RI,1(RI) i=i+1
ENDDO , end do /*}*/
IF CR,RK,NE,RJ THEN if kpos^=jcycle then ======
LR R1,RK kpos /*put{*/
SLA R1,2 .
LA R2,A-4(R1) @a(kpos)
DO WHILE=(C,RM,EQ,0(R2)) do while item=a(kpos)
LA RK,1(RK) kpos=kpos+1
LA R2,4(R2) @a(kpos)=@a(kpos)+4
ENDDO , end do
LR R1,RK kpos
SLA R1,2 .
LA R2,A-4(R1) @a(kpos)
L RT,0(R2) temp=a(kpos)
ST RM,0(R2) a(kpos)=item
LR RM,RT item=temp
L R2,WRITES writes
LA R2,1(R2) writes+1
ST R2,WRITES writes=writes+1 /*}*/
DO WHILE=(CR,RK,NE,RJ) do while(kpos^=jcycle) -----
LR RK,RJ kpos=jcycle /*find{*/
LA RI,1(RJ) i=jcycle+1
DO WHILE=(C,RI,LE,N) do i=jcycle+1 to n
LR R1,RI i
SLA R1,2 .
L R2,A-4(R1) a(i)
IF CR,R2,LT,RM THEN if a(i)<item then
LA RK,1(RK) kpos=kpos+1
ENDIF , end if
LA RI,1(RI) i=i+1
ENDDO , end do /*}*/
LR R1,RK kpos /*put{*/
SLA R1,2 .
LA R2,A-4(R1) @a(kpos)
DO WHILE=(C,RM,EQ,0(R2)) do while item=a(kpos)
LA RK,1(RK) kpos=kpos+1
LA R2,4(R2) @a(kpos)=@a(kpos)+4
ENDDO , end do
LR R1,RK kpos
SLA R1,2 .
LA R2,A-4(R1) @a(kpos)
L RT,0(R2) temp=a(kpos)
ST RM,0(R2) a(kpos)=item
LR RM,RT item=temp
L R2,WRITES writes
LA R2,1(R2) writes+1
ST R2,WRITES writes=writes+1 /*}*/
ENDDO , end while ------------------
ENDIF , end if =====================
LA RJ,1(RJ) jcycle=jcycle+1
ENDDO , end do jcycle
LA R3,PG pgi=0
LA RI,1 i=1
DO WHILE=(C,RI,LE,N) do i=1 to n
LR R1,RI i
SLA R1,2 .
L R2,A-4(R1) a(i)
XDECO R2,XDEC edit a(i)
MVC 0(4,R3),XDEC+8 output a(i)
LA R3,4(R3) pgi=pgi+4
LA RI,1(RI) i=i+1
ENDDO , end do
XPRNT PG,L'PG print buffer
L R1,WRITES writes
XDECO R1,XDEC edit writes
MVC XDEC(7),=CL7'writes='
XPRNT XDEC,L'XDEC print buffer
L R13,4(0,R13) epilog
LM R14,R12,12(R13) "
XR R15,R15 "
BR R14 exit
A DC F'4',F'65',F'2',F'-31',F'0',F'99',F'2',F'83',F'782',F'1'
DC F'45',F'82',F'69',F'82',F'104',F'58',F'88',F'112',F'89',F'74'
N DC A((N-A)/L'A) number of items of a
NM1 DS F n-1
PG DC CL80' ' buffer
XDEC DS CL12 temp for xdeco
WRITES DC F'0' number of writes
YREGS
RI EQU 6 i
RJ EQU 7 jcycle
RK EQU 8 kpos
RT EQU 9 temp
RM EQU 10 item
END CYCLESRT
</lang>
{{out}}
<pre>
-31 0 1 2 2 4 45 58 65 69 74 82 82 83 88 89 99 104 112 782
</pre>
 
 
=={{header|C}}==
1,392

edits