Sorting algorithms/Gnome sort: Difference between revisions

m
→‎version 1: put subroutines in alphabetical order, changed a comment.
(Add solution in Factor)
m (→‎version 1: put subroutines in alphabetical order, changed a comment.)
Line 2,203:
=={{header|REXX}}==
===version 1===
This REXX version uses aan oneunity-based array   (instead of a zero-based array).
<lang rexx>/*REXX program sorts an array using the gnome sort algorithm (elements contain blanks). */
call gen /*generate the @ stemmed array. */
Line 2,211:
call show ' after sort' /*display the after array elements.*/
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
gen: @.=; @.1='---the seven virtues---'; @.4="Hope" ; @.7='Justive'
@.2 = '=======================' ; @.5="Charity [LOVE]"; @.6 8= "Fortitude"'Prudence'
@.3 = 'Faith' ; @.6="Fortitude" ; @.7 9= "Justice"'Temperance'
do #=1 while @.#\==''; end; #=#-1; w=length(#); return /*find # of items.*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
gnomeSort: procedure expose @.; parse arg n; k=2 /*N: is number items. */
Line 2,220 ⟶ 2,225:
return
/*──────────────────────────────────────────────────────────────────────────────────────*/
genshow: @.=; do j=1 for #; @.1 =say '---the seven virtues---' ; element' right(j,w) arg(1)":" @.j; end; @.5 = "Charity [Love]"return</lang>
@.2 = '=======================' ; @.6 = "Fortitude"
@.3 = 'Faith' ; @.7 = "Justice"
@.4 = 'Hope' ; @.8 = "Prudence"
@.9 = "Temperance"
do #=1 while @.#\==''; end; #=#-1; w=length(#) /*find # of items.*/
return
/*──────────────────────────────────────────────────────────────────────────────────────*/
show: do j=1 for #; say ' element' right(j,w) arg(1)":" @.j; end; return</lang>
'''output'''
<pre>
/*REXX program sorts an array using the gnome sort algorithm (elements contain blanks). */
element 1 before sort: ---the seven virtues---
call gen /*generate the @ stemmed array. */
element 2 before sort: =======================
call show element 3 'before sort:' /*display the before array Faithelements.*/
say copies('▒', 60) /*show a separator line between sorts. */
element 4 before sort: Hope
call gnomeSort # /*invoke the well─known gnome sort. */
element 5 before sort: Charity [Love]
call show ' after sort' /*display the after array elements.*/
element 6 before sort: Fortitude
exit /*stick a fork in it, we're all @done.9 = "Temperance"*/
element 7 before sort: Justice
/*──────────────────────────────────────────────────────────────────────────────────────*/
element 8 before sort: Prudence
gen: @.=; @.1='---the seven virtues---'; @.4="Hope" ; @.7='Justive'
element 9 before sort: Temperance
@.2='======================='; @.5="Charity [LOVE]"; @.8='Prudence'
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
@.4 3= 'HopeFaith' ; ; @.6="Fortitude" ; @.8 9= "Prudence"'Temperance'
element 1 after sort: ---the seven virtues---
do #=1 while @.#\==''; end; #=#-1; w=length(#); return /*find # items.*/
element 2 after sort: =======================
/*──────────────────────────────────────────────────────────────────────────────────────*/
element 3 after sort: Charity [Love]
gnomeSort: procedure expose @.; parse arg n; k=2 /*N: is number items. */
element 4 after sort: Faith
do j=3 while k<=n; p=k-1 /*P: is previous item.*/
element 5 after sort: Fortitude
if @.p<<=@.k then do; k=j; iterate; end /*order is OK so far. */
element 6 after sort: Hope
_=@.p; @.p=@.k; @.k=_ /*swap two @ entries. */
element 7 after sort: Justice
k=k-1; if k==1 then k=j; else j=j-1 /*test for 1st index. */
element 8 after sort: Prudence
element 9 after sort: Temperance end /*j*/
return
/*──────────────────────────────────────────────────────────────────────────────────────*/
show: do j=1 for #; say ' element' right(j,w) arg(1)":" @.j; end; return</lang>
</pre>