Sorting algorithms/Comb sort: Difference between revisions
Content added Content deleted
(→{{header|REXX}}: added/changed whitespace and comments.) |
|||
Line 1,585: | Line 1,585: | ||
=={{header|REXX}}== |
=={{header|REXX}}== |
||
Programming note: the REXX statement (line |
Programming note: the REXX statement (line 12) <big> '''s=trunc(s*.8)''' </big> could've been expressed as: <big> '''s=s*.8%1''' </big> (which is faster), but is more cryptic. |
||
<lang rexx>/*REXX program sorts a stemmed array using the comb |
<lang rexx>/*REXX program sorts a stemmed array using the comb sort algorithm. */ |
||
call gen |
call gen; w=length(#) /*generate the @ array elements. */ |
||
call show |
call show 'before sort' /*display the before array elements. */ |
||
say copies('▒',60) /*display a separator line (a fence). */ |
|||
call |
call combSort # /*invoke the comb sort. */ |
||
call show ' after sort' /*display the after array elements. */ |
|||
⚫ | |||
/*──────────────────────────────────COMBSORT |
/*──────────────────────────────────COMBSORT subroutine───────────────────────*/ |
||
combSort: procedure expose @.; parse arg N /*N: is number of elements.*/ |
combSort: procedure expose @.; parse arg N /*N: is number of @ elements. */ |
||
⚫ | |||
s=N-1 /*S: is the spread between COMBs.*/ |
|||
do until s<=1 & done; done=1 /*assume sort is done (so far). */ |
|||
⚫ | |||
do j=1 until js>=N; js=j+s |
do j=1 until js>=N; js=j+s |
||
if @.j>@.js then do; _=@.j; @.j=@.js; @.js=_; done=0; end |
if @.j>@.js then do; _=@.j; @.j=@.js; @.js=_; done=0; end |
||
Line 1,602: | Line 1,603: | ||
end /*until*/ |
end /*until*/ |
||
return |
return |
||
/*──────────────────────────────────GEN |
/*──────────────────────────────────GEN subroutine────────────────────────────*/ |
||
gen |
gen: @. = ; @.12 = 'dodecagon 12' |
||
@.1 = '----polygon--- sides' ; @.13 = 'tridecagon 13' |
@.1 = '----polygon--- sides' ; @.13 = 'tridecagon 13' |
||
@.2 = '============== =======' ; @.14 = 'tetradecagon 14' |
@.2 = '============== =======' ; @.14 = 'tetradecagon 14' |
||
@.3 = 'triangle 3' ; @.15 = 'pentadecagon 15' |
@.3 = 'triangle 3' ; @.15 = 'pentadecagon 15' |
||
@.4 = 'quadrilateral 4' ; @.16 = 'hexadecagon 16' |
@.4 = 'quadrilateral 4' ; @.16 = 'hexadecagon 16' |
||
@.5 = 'pentagon 5' ; @.17 = 'heptadecagon 17' |
@.5 = 'pentagon 5' ; @.17 = 'heptadecagon 17' |
||
@.6 = 'hexagon 6' ; @.18 = 'octadecagon 18' |
@.6 = 'hexagon 6' ; @.18 = 'octadecagon 18' |
||
@.7 = 'heptagon 7' ; @.19 = 'enneadecagon 19' |
@.7 = 'heptagon 7' ; @.19 = 'enneadecagon 19' |
||
@.8 = 'octagon 8' ; @.20 = 'icosagon 20' |
@.8 = 'octagon 8' ; @.20 = 'icosagon 20' |
||
@.9 = 'nonagon 9' ; @.21 = 'hectogon 100' |
@.9 = 'nonagon 9' ; @.21 = 'hectogon 100' |
||
@.10 = 'decagon 10' ; @.22 = 'chiliagon 1000' |
@.10 = 'decagon 10' ; @.22 = 'chiliagon 1000' |
||
@.11 = 'hendecagon 11' ; @.23 = 'myriagon 10000' |
@.11 = 'hendecagon 11' ; @.23 = 'myriagon 10000' |
||
do #=1 while @.#\==''; end; #=#-1 /* |
do #=1 while @.#\==''; end; #=#-1 /*determine how many entries in @ array*/ |
||
return |
return |
||
/*──────────────────────────────────SHOW |
/*──────────────────────────────────SHOW subroutine───────────────────────────*/ |
||
show |
show: do j=1 for #; say ' element' right(j,w) arg(1)":" @.j; end; return</lang> |
||
say ' element' right(j,w) arg(1)":" @.j |
|||
⚫ | |||
return</lang> |
|||
Data note: A ''hendecagon'' (also known as an ''undecagon'' |
Data note: A ''hendecagon'' (also known as an ''undecagon'' |
||
or ''unidecagon'') is from the Greek word |
or ''unidecagon'') it is from the Greek word |
||
''hendeka'' [eleven] and ''gon─'' [corner]. <br> |
''hendeka'' [eleven] and ''gon─'' [corner]. <br> |
||
'''output''' |
'''output''' |
||
<pre style="height:80ex"> |
<pre style="height:80ex"> |
||
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ |
|||
element 1 before sort: ----polygon--- sides |
element 1 before sort: ----polygon--- sides |
||
element 2 before sort: ============== ======= |
element 2 before sort: ============== ======= |