Jump to content

Sorting algorithms/Sleep sort: Difference between revisions

m
→‎{{header|REXX}}: added a section header comment (only works with ...), changed/add comments and indentations, added whitespace.
m (→‎{{header|REXX}}: removed STYLE from the PRE html tag.)
m (→‎{{header|REXX}}: added a section header comment (only works with ...), changed/add comments and indentations, added whitespace.)
Line 904:
This sort will accept any manner of numbers, or for that matter, any character string as well.
<br>REXX isn't particular what is being sorted.
 
<lang rexx>/*REXX program implements a sleep sort (with numbers entered from C.L.)*/
This REXX version '''only''' works with Regina REXX &nbsp; (as the program uses the &nbsp; '''fork''' &nbsp; func tion.
<br>REXX isn't particular what is being sorted.
<lang rexx>/*REXX program implements a sleep sort (with numbers entered from C.L.).*/
numeric digits 300 /*over the top, but what the hey!*/
/* (above) ...··· from vaudeville.*/
#.= /*placeholder for the array of #s*/
stuff=' 1e9 50 5 40 4 1 100 30 3 12 2 8 9 7 6 6 10 20 0' /*alphabetically*/
parse arg numbers /*let the user specify on the CL.*/
if numbers='' then numbers=stuff /*Not specified? Then use default*/
N=words(numbers) /*N is the number of numbers. */
w=length(N) /*width of N (for nice output).*/
say N 'numbers to be sorted:' numbers /*informative informational info.*/
 
do j=1 for N /*let's start to boogie-woogie. */
#.j=word(numbers,j) /*plug in one number at a time. */
if datatype(#.j,'NumericN') then #.j = #.j/1 /*normalize it if numa number.*/
call fork /*only REGINA REXX supports FORK func.*/
call sortItem j /*start a sort for array number. */
end /*j*/
 
do forever while \inOrder(N) /*wait for the sorts to complete.*/
call sleep 1 /*1 sec is the minminimum effective time*/
end /*forever while*/ /*well, other than zero seconds. */
 
m=max(length(#.1),length(#.N)) /*width of smallest | largest num*/
say; say 'after sort:'; indent=left('',20) /*samedisplay as:blank line COPIES('and ',20)a title.*/
 
/*∙∙∙but LEFT pads [much faster]*/
do k=1 for N /*list (sorted) array's elements.*/
say indentleft('',20) 'array element' right(k,w) '───>───►' right(#.k,m)
end /*k*/
exit /*stick a fork in it, we're done.*/
/*───────────────────────────────────SortItem subroutine────────────────*/
sortItem: procedure expose #.; parse arg ? /*sorts single item.*/
do Asort=1 until \switched /*cook until cooked.*/
switched=0 /*honkyhunky-dorey so far*/
do i=1 while #.i\=='' & \switched
if #.? >= #.i then iterate /*this one ok*/
parse value #.? #.i with #.i #.?
switched=1 /*yup, we[↑] done switchedswapped one.*/
end /*i*/
if Asort//?==0 then call sleep switched /*sleep if last*/
end /*Asort*/
return /*Sleeping Beauty awakes. Not to worry: (c) = circa 1697.*/
/*───────────────────────────────────InOrder subroutine─────────────────*/
inOrder: procedure expose #.; parse arg howMany /*is array in order? */
do m=1 for howMany-1; next=m+1; if #.m>#.next then return 0
end /*m*/ /*keep looking for fountain of yut*/
return 1 /*yes, indicate with an indicator.*/</lang>
</lang>
'''output''' when using the default input
<pre>
Cookies help us deliver our services. By using our services, you agree to our use of cookies.