Sorting algorithms/Gnome sort: Difference between revisions
Content deleted Content added
m →version 1: put subroutines in alphabetical order, changed a comment. |
m →version 1: corrected a finger-fumble. |
||
Line 2,228: | Line 2,228: | ||
'''output''' |
'''output''' |
||
<pre> |
<pre> |
||
element 1 before sort: ---the seven virtues--- |
|||
/*REXX program sorts an array using the gnome sort algorithm (elements contain blanks). */ |
|||
element 2 before sort: ======================= |
|||
call gen /*generate the @ stemmed array. */ |
|||
element 3 before sort: Faith |
|||
element 4 before sort: Hope |
|||
say copies('▒', 60) /*show a separator line between sorts. */ |
|||
element 5 before sort: Charity [LOVE] |
|||
call gnomeSort # /*invoke the well─known gnome sort. */ |
|||
element 6 before sort: Fortitude |
|||
call show ' after sort' /*display the after array elements.*/ |
|||
element 7 before sort: Justive |
|||
exit /*stick a fork in it, we're all done. */ |
|||
element 8 before sort: Prudence |
|||
/*──────────────────────────────────────────────────────────────────────────────────────*/ |
|||
element 9 before sort: Temperance |
|||
gen: @.=; @.1='---the seven virtues---'; @.4="Hope" ; @.7='Justive' |
|||
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ |
|||
@.2='======================='; @.5="Charity [LOVE]"; @.8='Prudence' |
|||
element 1 after sort: ---the seven virtues--- |
|||
@.3='Faith' ; @.6="Fortitude" ; @.9='Temperance' |
|||
element 2 after sort: ======================= |
|||
do #=1 while @.#\==''; end; #=#-1; w=length(#); return /*find # items.*/ |
|||
element 3 after sort: Charity [LOVE] |
|||
/*──────────────────────────────────────────────────────────────────────────────────────*/ |
|||
element 4 after sort: Faith |
|||
gnomeSort: procedure expose @.; parse arg n; k=2 /*N: is number items. */ |
|||
element 5 after sort: Fortitude |
|||
do j=3 while k<=n; p=k-1 /*P: is previous item.*/ |
|||
element 6 after sort: Hope |
|||
if @.p<<=@.k then do; k=j; iterate; end /*order is OK so far. */ |
|||
element 7 after sort: Justive |
|||
_=@.p; @.p=@.k; @.k=_ /*swap two @ entries. */ |
|||
element 8 after sort: Prudence |
|||
k=k-1; if k==1 then k=j; else j=j-1 /*test for 1st index. */ |
|||
element 9 after sort: Temperance |
|||
return |
|||
/*──────────────────────────────────────────────────────────────────────────────────────*/ |
|||
show: do j=1 for #; say ' element' right(j,w) arg(1)":" @.j; end; return |
|||
</pre> |
</pre> |
||