Sorting algorithms/Heapsort: Difference between revisions
Content deleted Content added
m →{{header|REXX}}: changed the default array from a modern Greek alphabet to an epichoric alphabet, added/changed comments and whitespace, added whitespace before assignments (that have literals). |
|||
Line 3,162:
Indexing of the array (for this version) starts with '''1''' (one), but can be programmed to start with zero.
<lang rexx>/*REXX
@.=;
@.6= 'epsilon'; @.12= "lambda";
do #=1 until @.#==''; end; #=# - 1 /*find # entries.*/
call show "before sort:"
call heapSort #; say copies('▒', 40) /*sort; show sep.*/
Line 3,175 ⟶ 3,176:
/*──────────────────────────────────────────────────────────────────────────────────────*/
heapSort: procedure expose @.; arg n; do j=n%2 by -1 to 1; call shuffle j,n; end /*j*/
do n=n by -1 to 2; _=@.1; @.1=@.n; @.n=_; call shuffle 1, n-1
end /*n*/ /* [↑] swap two elements; and shuffle.*/
return
Line 3,186 ⟶ 3,187:
@.i=$; return
/*──────────────────────────────────────────────────────────────────────────────────────*/
show: do
<pre>
element 1 before sort: alpha
Line 3,193 ⟶ 3,194:
element 3 before sort: gamma
element 4 before sort: delta
element 5 before sort:
element 6 before sort:
element 7 before sort:
element 8 before sort:
element 9 before sort:
element 10 before sort:
element 11 before sort:
element 12 before sort:
element 13 before sort:
element 14 before sort:
element 15 before sort:
element 16 before sort:
element 17 before sort:
element 18 before sort:
element 19 before sort:
element 20 before sort:
element 21 before sort:
element 22 before sort:
element 23 before sort:
element 24 before sort:
element 25 before sort: chi
element 26 before sort: psi
element 27 before sort: omega
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
element 1 after sort: alpha
Line 3,218 ⟶ 3,222:
element 3 after sort: chi
element 4 after sort: delta
element 5 after sort:
element 6 after sort:
element 7 after sort:
element 8 after sort:
element 9 after sort:
element 10 after sort:
element 11 after sort:
element 12 after sort:
element 13 after sort:
element 14 after sort:
element 15 after sort:
element 16 after sort:
element 17 after sort:
element 18 after sort:
element 19 after sort:
element 20 after sort:
element 21 after sort:
element 22 after sort:
element 23 after sort:
element 24 after sort:
element 25 after sort: upsilon
element 26 after sort: xi
element 27 after sort: zeta
</pre>
===version 2===
This REXX version creates a stemmed array from a list (it can be numbers or characters).
<lang rexx>/*REXX
parse arg g /*obtain optional
if g='' then g=
"mu nu xi omicron pi san qoppa rho sigma tau upsilon phi chi psi omega"
call show "before sort:"
call heapSort #;
call show " after sort:"
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
heapSort: procedure expose @.; arg n; do j=n%2 by -1 to 1; call shuffle j,n; end /*j*/
do n=n by -1 to 2; _=@.1; @.1=@.n; @.n=_; call shuffle 1, n-1
end /*n*/ /* [↑] swap two elements; and shuffle.*/
return
/*──────────────────────────────────────────────────────────────────────────────────────*/
shuffle: procedure expose @.; parse arg i,n; $=@.i /*obtain parent.
do while i+i<=n; j=i+i; k=j+1
if k<=n then if @.k>@.j then j=k
Line 3,264 ⟶ 3,271:
@.i=$; return
/*──────────────────────────────────────────────────────────────────────────────────────*/
show: do
<pre>
element 1 before sort: 19
|