Sorting algorithms/Counting sort: Difference between revisions

Content added Content deleted
m (→‎version 2: added other reasons for improvement.)
m (→‎{{header|REXX}}: changed whitespace and comments. enclosed list in quotes.)
Line 2,717: Line 2,717:
===version 1===
===version 1===
<lang rexx>/*REXX pgm sorts an array of integers (can be negative) using the count─sort algorithm.*/
<lang rexx>/*REXX pgm sorts an array of integers (can be negative) using the count─sort algorithm.*/
$=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
$= '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($); w= length(#); _.= 0 /* [↑] a list of some Recaman numbers.*/
#= words($); w= length(#); !.= 0 /* [↑] a list of some Recaman numbers.*/
m= 0; LO= word($, 1); HI= LO /*M: max width of any number in @. */
m= 1; LO= word($, 3); HI= LO /*M: max width of any integer in @. */
do i=1 for #; z= word($, i); @.i= z; m= max(m, length(z)) /*get from $ list. */
do j=1 for #; z= word($, j)+0; @.j= z; m= max(m, length(z) ) /*get from $ list*/
_.z= _.z + 1; LO= min(LO, z); HI= max(HI, z) /*find the LO & HI.*/
!.z= !.z + 1; LO= min(LO, z); HI= max(HI, z) /*find LO and HI.*/
end /*i*/
end /*j*/
/*W: max index width for the @. array*/
/*W: max index width for the @. array*/
call show 'before sort: ' /*show the before array elements. */
call show 'before sort: ' /*show the before array elements. */
say copies('', 55) /*show a separator line (before/after).*/
say copies('', 55) /*show a separator line (before/after).*/
call countSort # /*sort a number of entries of @. array.*/
call countSort # /*sort a number of entries of @. array.*/
call show ' after sort: ' /*show the after array elements. */
call show ' after sort: ' /*show the after array elements. */
exit /*stick a fork in it, we're all done. */
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
countSort: parse arg N; x= 1; do k=LO to HI; do x=x for _.k; @.x= k; end /*x*/
countSort: parse arg N; x= 1; do k=LO to HI; do x=x for !.k; @.x= k; end /*x*/
end /*k*/
end /*k*/
return
return