Sorting algorithms/Gnome sort: Difference between revisions

Content added Content deleted
(→‎{{header|REXX}}: removed superflous blanks, added comments to source code. -- ~~~)
Line 1,372: Line 1,372:


=={{header|REXX}}==
=={{header|REXX}}==
<lang rexx>/*REXX program sorts an array using the gnome-sort method. */
<lang rexx>
call gen@ /*generate the array elements. */
/*REXX program sorts an array using the gnome-sort method. */
call show@ 'before sort' /*show "before" array elements.*/

call gen@ /*generate array elements. */
call gnomeSort highItem /*invoke the infamous gnome sort.*/
call show@ 'before sort' /*show before array elements*/
call show@ ' after sort' /*show "after" array elements.*/
call gnomeSort highItem /*invoke the gnome sort. */
call show@ ' after sort' /*show after array elements*/
exit
exit
/*─────────────────────────────────────gnomeSORT subroutine─────────────*/
gnomeSort: procedure expose @.; parse arg n; k=2


do j=3 while k<=n; km=k-1

if @.km<=@.k then k=j
/*─────────────────────────────────────gnomeSORT subroutine────────*/
else do
gnomeSort: procedure expose @.; parse arg n
_=@.km /*swap two entries in the array. */
k=2
@.km=@.k

@.k=_
do j=3 while k<=n
k=k-1; if k==1 then k=j
km1=k-1
end
if @.km1<=@.k then k=j
else do
end /*j*/
_=@.km1
@.km1=@.k
@.k=_
k=k-1
if k==1 then k=j
end
end

return
return
/*─────────────────────────────────────GEN@ subroutine──────────────────*/

gen@: @.= /*assign a default value (null). */

/*─────────────────────────────────────GEN@ subroutine─────────────*/
gen@: @.='' /*assign default value. */

@.1='---the seven virtues---'
@.1='---the seven virtues---'
@.2='======================='
@.2='======================='
Line 1,413: Line 1,402:
@.8='Prudence'
@.8='Prudence'
@.9='Temperance'
@.9='Temperance'
do highItem=1 while @.highItem\=='' /*find how many entries in array.*/

end /*not much of a DO loop, eh? */
do highItem=1 while @.highItem\=='' /*find how many entries. */
highItem=highItem-1 /*because of DO, adjust highItem.*/
end

highItem=highItem-1 /*adjust highItem slightly. */
return


/*─────────────────────────────────────SHOW@ subroutine────────────*/
show@: widthH=length(highItem) /*maximum width of any line.*/

do j=1 for highItem
say 'element' right(j,widthH) arg(1)":" @.j
end

say copies('─',80) /*show a seperator line. */
return
return
/*─────────────────────────────────────SHOW@ subroutine─────────────────*/
</lang>
show@: widthH=length(highItem) /*the maximum width of any line. */
Output:
do j=1 for highItem /*show and tell time for array. */
<pre style="height:30ex;overflow:scroll">
say 'element' right(j,widthH) arg(1)":" @.j /*make it pretty. */
end
say copies('─',60) /*show a seperator line. */
return</lang>
'''output'''
<pre style="height:40ex;overflow:scroll">
element 1 before sort: ---the seven virtues---
element 1 before sort: ---the seven virtues---
element 2 before sort: =======================
element 2 before sort: =======================
Line 1,442: Line 1,424:
element 8 before sort: Prudence
element 8 before sort: Prudence
element 9 before sort: Temperance
element 9 before sort: Temperance
────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────────

element 1 after sort: ---the seven virtues---
element 1 after sort: ---the seven virtues---
element 2 after sort: =======================
element 2 after sort: =======================
Line 1,453: Line 1,434:
element 8 after sort: Prudence
element 8 after sort: Prudence
element 9 after sort: Temperance
element 9 after sort: Temperance
────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────────
</pre>
</pre>