Sorting algorithms/Counting sort: Difference between revisions

Content added Content deleted
(→‎{{header|Julia}}: A new entry for Julia)
m (→‎version 1: changed indentations, whitespace, separator, and comments, also simplified the "counting" DO loop.)
Line 1,744: Line 1,744:
=={{header|REXX}}==
=={{header|REXX}}==
===version 1===
===version 1===
<lang rexx>/*REXX program sorts an array using the count-sort algorithm. */
<lang rexx>/*REXX program sorts an array using the count─sort algorithm. */
call gen@ /*generate the array elements. */
$=1 3 6 2 7 13 20 12 21 11 22 10 23 9 24 8 25 43 62 42 63 41 18 42 17 43 16 44 15 45 14 46 79 113 78 114 77 39 78 38
#=words($); do j=1 for #
call show@ 'before sort' /*show the before array elements.*/
call countSort # /*sort N entries of the @. array.*/
@.j=word($,j) /*assign a Recaman # from a list.*/
call show@ ' after sort' /*show the after array elements.*/
end /*j*/ /* [↑] assign 40 Recaman numbers*/
call show@ 'before sort: ' /*show the before array elements.*/
call countSort # /*sort # entries of the @. array.*/
call show@ ' after sort: ' /*show the after array elements.*/
exit /*stick a fork in it, we're done.*/
exit /*stick a fork in it, we're done.*/
/*──────────────────────────────────COUNTSORT subroutine────────────────*/
/*──────────────────────────────────COUNTSORT subroutine────────────────*/
countSort: procedure expose @.; parse arg N; h=@.1; L=h
countSort: procedure expose @.; parse arg N; L=@.1; h=L; _.=0; x=1
do i=2 to N; L=min(L,@.i); h=max(h,@.i); end /*i*/

do i=2 to N; L=min(L,@.i); h=max(h,@.i); end /*i*/
do j=1 for N; z=@.j; _.z=_.z+1; end /*j*/
do k=L to h; do x=x for _.k; @.x=k; end /*x*/; end /*k*/

_.=0; do j=1 for N; x=@.j; _.x=_.x+1; end /*j*/

x=1; do k=L to h; if _.k\==0 then do x=x for _.k
@.x=k
end /*x*/
end /*k*/
return
/*──────────────────────────────────GEN@ subroutine─────────────────────*/
gen@: $=1 3 6 2 7 13 20 12 21 11 22 10 23 9 24 8 25 43 62 42 63 41 18 42 17 43 16 44 15 45 14 46 79 113 78 114 77 39 78 38
#=words($)
do j=1 for # /* [↓] assign 40 Recaman numbers.*/
@.j=word($,j) /*assign a Recaman # from a list.*/
end /*j*/
return
return
/*──────────────────────────────────SHOW@ subroutine────────────────────*/
/*──────────────────────────────────SHOW@ subroutine────────────────────*/
show@: do s=1 for #
show@: do s=1 for #; say right("element",20) right(s,length(#)) arg(1) @.s
end /*s*/
say left('',9) "element" right(s,length(#)) arg(1)': ' @.s
say copies('',55) /*show a pretty separator line. */
end /*s*/

say copies('',50) /*show a pretty separator line. */
return</lang>
return</lang>
'''output'''
'''output'''
<pre style="height:50ex">
<pre style="height:50ex">
element 1 before sort: 1
element 1 before sort: 1
element 2 before sort: 3
element 2 before sort: 3
element 3 before sort: 6
element 3 before sort: 6
element 4 before sort: 2
element 4 before sort: 2
element 5 before sort: 7
element 5 before sort: 7
element 6 before sort: 13
element 6 before sort: 13
element 7 before sort: 20
element 7 before sort: 20
element 8 before sort: 12
element 8 before sort: 12
element 9 before sort: 21
element 9 before sort: 21
element 10 before sort: 11
element 10 before sort: 11
element 11 before sort: 22
element 11 before sort: 22
element 12 before sort: 10
element 12 before sort: 10
element 13 before sort: 23
element 13 before sort: 23
element 14 before sort: 9
element 14 before sort: 9
element 15 before sort: 24
element 15 before sort: 24
element 16 before sort: 8
element 16 before sort: 8
element 17 before sort: 25
element 17 before sort: 25
element 18 before sort: 43
element 18 before sort: 43
element 19 before sort: 62
element 19 before sort: 62
element 20 before sort: 42
element 20 before sort: 42
element 21 before sort: 63
element 21 before sort: 63
element 22 before sort: 41
element 22 before sort: 41
element 23 before sort: 18
element 23 before sort: 18
element 24 before sort: 42
element 24 before sort: 42
element 25 before sort: 17
element 25 before sort: 17
element 26 before sort: 43
element 26 before sort: 43
element 27 before sort: 16
element 27 before sort: 16
element 28 before sort: 44
element 28 before sort: 44
element 29 before sort: 15
element 29 before sort: 15
element 30 before sort: 45
element 30 before sort: 45
element 31 before sort: 14
element 31 before sort: 14
element 32 before sort: 46
element 32 before sort: 46
element 33 before sort: 79
element 33 before sort: 79
element 34 before sort: 113
element 34 before sort: 113
element 35 before sort: 78
element 35 before sort: 78
element 36 before sort: 114
element 36 before sort: 114
element 37 before sort: 77
element 37 before sort: 77
element 38 before sort: 39
element 38 before sort: 39
element 39 before sort: 78
element 39 before sort: 78
element 40 before sort: 38
element 40 before sort: 38
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
──────────────────────────────────────────────────
element 1 after sort: 1
element 1 after sort: 1
element 2 after sort: 2
element 2 after sort: 2
element 3 after sort: 3
element 3 after sort: 3
element 4 after sort: 6
element 4 after sort: 6
element 5 after sort: 7
element 5 after sort: 7
element 6 after sort: 8
element 6 after sort: 8
element 7 after sort: 9
element 7 after sort: 9
element 8 after sort: 10
element 8 after sort: 10
element 9 after sort: 11
element 9 after sort: 11
element 10 after sort: 12
element 10 after sort: 12
element 11 after sort: 13
element 11 after sort: 13
element 12 after sort: 14
element 12 after sort: 14
element 13 after sort: 15
element 13 after sort: 15
element 14 after sort: 16
element 14 after sort: 16
element 15 after sort: 17
element 15 after sort: 17
element 16 after sort: 18
element 16 after sort: 18
element 17 after sort: 20
element 17 after sort: 20
element 18 after sort: 21
element 18 after sort: 21
element 19 after sort: 22
element 19 after sort: 22
element 20 after sort: 23
element 20 after sort: 23
element 21 after sort: 24
element 21 after sort: 24
element 22 after sort: 25
element 22 after sort: 25
element 23 after sort: 38
element 23 after sort: 38
element 24 after sort: 39
element 24 after sort: 39
element 25 after sort: 41
element 25 after sort: 41
element 26 after sort: 42
element 26 after sort: 42
element 27 after sort: 42
element 27 after sort: 42
element 28 after sort: 43
element 28 after sort: 43
element 29 after sort: 43
element 29 after sort: 43
element 30 after sort: 44
element 30 after sort: 44
element 31 after sort: 45
element 31 after sort: 45
element 32 after sort: 46
element 32 after sort: 46
element 33 after sort: 62
element 33 after sort: 62
element 34 after sort: 63
element 34 after sort: 63
element 35 after sort: 77
element 35 after sort: 77
element 36 after sort: 78
element 36 after sort: 78
element 37 after sort: 78
element 37 after sort: 78
element 38 after sort: 79
element 38 after sort: 79
element 39 after sort: 113
element 39 after sort: 113
element 40 after sort: 114
element 40 after sort: 114
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
──────────────────────────────────────────────────
</pre>
</pre>