Sorting algorithms/Gnome sort: Difference between revisions

→‎{{header|REXX}}: removed superflous blanks, added comments to source code. -- ~~~
(→‎{{header|REXX}}: removed superflous blanks, added comments to source code. -- ~~~)
Line 1,372:
 
=={{header|REXX}}==
<lang rexx>/*REXX program sorts an array using the gnome-sort method. */
<lang rexx>
call showgen@ ' after sort' /*showgenerate afterthe array elements. */
/*REXX program sorts an array using the gnome-sort method. */
call show@ 'before sort' /*show "before" array elements.*/
 
call gen@ gnomeSort highItem /*generateinvoke arraythe elements.infamous gnome sort.*/
call show@ 'before after sort' /*show before "after" array elements.*/
call gnomeSort highItem /*invoke the gnome sort. */
call show@ ' after sort' /*show after array elements*/
exit
/*─────────────────────────────────────gnomeSORT subroutine────────subroutine─────────────*/
gnomeSort: procedure expose @.; parse arg n; k=2
 
do j=3 while k<=n; kkm=k-1
 
if @.km1km<=@.k then k=j
/*─────────────────────────────────────gnomeSORT subroutine────────*/
_=@.km1 else do
gnomeSort: procedure expose @.; parse arg n
gen@: @.='' _=@.km /*assignswap default value.two entries in the array. */
k=2
@.km1km=@.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
end else do/*j*/
_=@.km1
@.km1=@.k
@.k=_
k=k-1
if k==1 then k=j
end
end
 
return
/*─────────────────────────────────────GEN@ subroutine─────────────subroutine──────────────────*/
 
gen@: @.= /*assign a default value (null). */
 
/*─────────────────────────────────────GEN@ subroutine─────────────*/
gen@: @.='' /*assign default value. */
 
@.1='---the seven virtues---'
@.2='======================='
Line 1,413 ⟶ 1,402:
@.8='Prudence'
@.9='Temperance'
do highItem=1 while @.highItem\=='' /*find how many entries. in array.*/
 
say copies('─',80) end /*shownot much of a seperatorDO loop, eh? line. */
do highItem=1 while @.highItem\=='' /*find how many entries. */
highItem=highItem-1 /*because of DO, adjust highItem slightly. */
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
/*─────────────────────────────────────SHOW@ subroutine────────────subroutine─────────────────*/
</lang>
show@: widthH=length(highItem) /*the maximum width of any line. */
Output:
call gnomeSort do j=1 for highItem /*invokeshow theand gnometell sort.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:30ex40ex;overflow:scroll">
element 1 before sort: ---the seven virtues---
element 2 before sort: =======================
Line 1,442 ⟶ 1,424:
element 8 before sort: Prudence
element 9 before sort: Temperance
────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────────
 
element 1 after sort: ---the seven virtues---
element 2 after sort: =======================
Line 1,453 ⟶ 1,434:
element 8 after sort: Prudence
element 9 after sort: Temperance
────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────────
</pre>