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(#); |
#= words($); w= length(#); !.= 0 /* [↑] a list of some Recaman numbers.*/ |
||
m= |
m= 1; LO= word($, 3); HI= LO /*M: max width of any integer in @. */ |
||
do |
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 LO and HI.*/ |
|||
end /* |
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(' |
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; |
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 |