Sorting algorithms/Heapsort: Difference between revisions
Content added Content deleted
(→{{header|Perl 6}}: Added Perl 6 solution) |
|||
Line 1,242: | Line 1,242: | ||
>>> heapsort(ary) |
>>> heapsort(ary) |
||
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</pre> |
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</pre> |
||
=={{header|REXX}}== |
|||
<lang rexx> |
|||
/*REXX program sorts an array using the heapsort method. */ |
|||
call gen@ /*generate array elements. */ |
|||
call show@ 'before sort' /*show before array elements*/ |
|||
call heapSort highItem /*invoke the heap sort. */ |
|||
call show@ ' after sort' /*show after array elements*/ |
|||
exit |
|||
/*─────────────────────────────────────HEAPSORT subroutine─────────*/ |
|||
heapSort: procedure expose @.; parse arg n |
|||
do j=n%2 by -1 to 1 |
|||
call shuffle j,n |
|||
end |
|||
do n=n by -1 to 2 |
|||
_=@.1; @.1=@.n; @.n=_; call shuffle 1,n |
|||
end |
|||
return |
|||
/*─────────────────────────────────────SHUFFLE subroutine──────────*/ |
|||
shuffle: procedure expose @.; parse arg i,n; _=@.i |
|||
do while i+i<=n |
|||
j=i+i; k=j+1 |
|||
if k<=n & @.k>@.j then j=k |
|||
if _>=@.j then leave |
|||
@.i=@.j; i=j |
|||
end |
|||
@.i=_ |
|||
return |
|||
/*─────────────────────────────────────GEN@ subroutine─────────────*/ |
|||
gen@: @.='' /*assign default value. */ |
|||
@.1 ='---letters of the modern Greek Alphabet---' |
|||
@.2 ='==========================================' |
|||
@.3 ='alpha' |
|||
@.4 ='beta' |
|||
@.5 ='gamma' |
|||
@.6 ='delta' |
|||
@.7 ='epsilon' |
|||
@.8 ='zeta' |
|||
@.9 ='eta' |
|||
@.10='theta' |
|||
@.11='iota' |
|||
@.12='kappa' |
|||
@.13='lambda' |
|||
@.14='mu' |
|||
@.15='nu' |
|||
@.16='xi' |
|||
@.17='omicron' |
|||
@.18='pi' |
|||
@.19='rho' |
|||
@.20='sigma' |
|||
@.21='tau' |
|||
@.22='upsilon' |
|||
@.23='phi' |
|||
@.24='chi' |
|||
@.25='psi' |
|||
@.26='omega' |
|||
do highItem=1 while @.highItem\=='' /*find how many entries. */ |
|||
end |
|||
highItem=highItem-1 /*adjust highItem slightly. */ |
|||
return |
|||
/*─────────────────────────────────────SHOW@ subroutine────────────*/ |
|||
show@: widthH=length(highItem) /*maximum widht 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 |
|||
</lang> |
|||
Output: |
|||
<pre style="height:30ex;overflow:scroll"> |
|||
element 1 before sort: ---letters of the modern Greek Alphabet--- |
|||
element 2 before sort: ========================================== |
|||
element 3 before sort: alpha |
|||
element 4 before sort: beta |
|||
element 5 before sort: gamma |
|||
element 6 before sort: delta |
|||
element 7 before sort: epsilon |
|||
element 8 before sort: zeta |
|||
element 9 before sort: eta |
|||
element 10 before sort: theta |
|||
element 11 before sort: iota |
|||
element 12 before sort: kappa |
|||
element 13 before sort: lambda |
|||
element 14 before sort: mu |
|||
element 15 before sort: nu |
|||
element 16 before sort: xi |
|||
element 17 before sort: omicron |
|||
element 18 before sort: pi |
|||
element 19 before sort: rho |
|||
element 20 before sort: sigma |
|||
element 21 before sort: tau |
|||
element 22 before sort: upsilon |
|||
element 23 before sort: phi |
|||
element 24 before sort: chi |
|||
element 25 before sort: psi |
|||
element 26 before sort: omega |
|||
──────────────────────────────────────────────────────────────────────────────── |
|||
element 1 after sort: eta |
|||
element 2 after sort: ========================================== |
|||
element 3 after sort: chi |
|||
element 4 after sort: beta |
|||
element 5 after sort: delta |
|||
element 6 after sort: ---letters of the modern Greek Alphabet--- |
|||
element 7 after sort: theta |
|||
element 8 after sort: iota |
|||
element 9 after sort: omicron |
|||
element 10 after sort: lambda |
|||
element 11 after sort: omega |
|||
element 12 after sort: kappa |
|||
element 13 after sort: nu |
|||
element 14 after sort: mu |
|||
element 15 after sort: epsilon |
|||
element 16 after sort: alpha |
|||
element 17 after sort: phi |
|||
element 18 after sort: pi |
|||
element 19 after sort: psi |
|||
element 20 after sort: rho |
|||
element 21 after sort: sigma |
|||
element 22 after sort: tau |
|||
element 23 after sort: gamma |
|||
element 24 after sort: upsilon |
|||
element 25 after sort: xi |
|||
element 26 after sort: zeta |
|||
──────────────────────────────────────────────────────────────────────────────── |
|||
</pre> |
|||
=={{header|Ruby}}== |
=={{header|Ruby}}== |