Jump to content

Sorting algorithms/Comb sort: Difference between revisions

→‎{{header|REXX}}: added/changed whitespace and comments.
(→‎{{header|REXX}}: added/changed whitespace and comments.)
Line 1,585:
 
=={{header|REXX}}==
Programming note: &nbsp; the REXX statement (line 1112) &nbsp; &nbsp; <big> '''s=trunc(s*.8)''' </big> &nbsp; &nbsp; could've been expressed as: &nbsp; &nbsp; <big> '''s=s*.8%1''' </big> &nbsp; &nbsp; (which is slowerfaster), but is more cryptic.
<lang rexx>/*REXX program sorts a stemmed array using the comb- sort algorithm. */
call gen@; w=length(#) /*generate the @ array elements. */
call show@ 'before sort' 'before sort' /*showdisplay the before array elements. */
call combSort #say copies('▒',60) /*invoke the comb sort. display a separator line (a fence). */
call show@combSort # ' after sort' /*showinvoke the aftercomb array elementssort. */
exit call show ' after sort' /*stickdisplay athe fork in it,after we're donearray elements. */
s=N-1exit /*S:stick isa thefork spreadin betweenit, COMBs we're all done. */
/*──────────────────────────────────COMBSORT subroutine─────────────────subroutine───────────────────────*/
combSort: procedure expose @.; parse arg N /*N: is number of @ elements. */
s=N-1 /*S: is the spread between COMBs.*/
s=N-1 do until s<=1 & done; done=1 /*assume sortS: is donethe spread (sobetween far)COMBs. */
s=trunc(s*.8) do until s<=1 & done; done=1 /*assume ÷ sort is slow,done (so *far). is better.*/
s=trunc(s*.8) end /*j ÷ is slow, * is better.*/
do j=1 until js>=N; js=j+s
if @.j>@.js then do; _=@.j; @.j=@.js; @.js=_; done=0; end
Line 1,602 ⟶ 1,603:
end /*until*/
return
/*──────────────────────────────────GEN@ subroutine─────────────────────subroutine────────────────────────────*/
gen@: @. = ; @.12 = 'dodecagon 12'
@.1 = '----polygon--- sides' ; @.13 = 'tridecagon 13'
@.2 = '============== =======' ; @.14 = 'tetradecagon 14'
@.3 = 'triangle 3' ; @.15 = 'pentadecagon 15'
@.4 = 'quadrilateral 4' ; @.16 = 'hexadecagon 16'
@.5 = 'pentagon 5' ; @.17 = 'heptadecagon 17'
@.6 = 'hexagon 6' ; @.18 = 'octadecagon 18'
@.7 = 'heptagon 7' ; @.19 = 'enneadecagon 19'
@.8 = 'octagon 8' ; @.20 = 'icosagon 20'
@.9 = 'nonagon 9' ; @.21 = 'hectogon 100'
@.10 = 'decagon 10' ; @.22 = 'chiliagon 1000'
@.11 = 'hendecagon 11' ; @.23 = 'myriagon 10000'
do #=1 while @.#\==''; end; #=#-1 /*finddetermine how many entries in @ array.*/
return
/*──────────────────────────────────SHOW@ subroutine────────────────────subroutine───────────────────────────*/
show@: say copies('▒',60); do j=1 for #; say ' /*display array elements element' right(j,w) arg(1)":" @.*j; end; return</lang>
say ' element' right(j,w) arg(1)":" @.j
end /*j*/
return</lang>
Data note: &nbsp; A &nbsp; ''hendecagon'' &nbsp; (also known as an &nbsp; ''undecagon''
&nbsp; or &nbsp; ''unidecagon'') &nbsp; it is from the Greek word &nbsp;
''hendeka'' &nbsp; [eleven] &nbsp; and &nbsp; ''gon─'' &nbsp; [corner]. <br>
 
'''output'''
<pre style="height:80ex">
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
element 1 before sort: ----polygon--- sides
element 2 before sort: ============== =======
Cookies help us deliver our services. By using our services, you agree to our use of cookies.