Sorting algorithms/Heapsort: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: removed distracting titles within the data, added a version that starts with a list, changed/added whitespace and comments.) |
(Added uBasic/4tH version) |
||
Line 3,342: | Line 3,342: | ||
:Return |
:Return |
||
=={{header|uBasic/4tH}}== |
|||
<lang>PRINT "Heap sort:" |
|||
n = FUNC (_InitArray) |
|||
PROC _ShowArray (n) |
|||
PROC _Heapsort (n) |
|||
PROC _ShowArray (n) |
|||
PRINT |
|||
END |
|||
_Heapsort PARAM(1) ' Heapsort |
|||
LOCAL (1) |
|||
PROC _Heapify (a@) |
|||
b@ = a@ - 1 |
|||
DO WHILE b@ > 0 |
|||
PROC _Swap (b@, 0) |
|||
PROC _Siftdown (0, b@) |
|||
b@ = b@ - 1 |
|||
LOOP |
|||
RETURN |
|||
_Heapify PARAM(1) |
|||
LOCAL(1) |
|||
b@ = (a@ - 2) / 2 |
|||
DO WHILE b@ > -1 |
|||
PROC _Siftdown (b@, a@) |
|||
b@ = b@ - 1 |
|||
LOOP |
|||
RETURN |
|||
_Siftdown PARAM(2) |
|||
LOCAL(2) |
|||
c@ = a@ |
|||
DO WHILE ((c@ * 2) + 1) < (b@) |
|||
d@ = c@ * 2 + 1 |
|||
IF d@+1 < b@ IF @(d@) < @(d@+1) THEN d@ = d@ + 1 |
|||
WHILE @(c@) < @(d@) |
|||
PROC _Swap (d@, c@) |
|||
c@ = d@ |
|||
LOOP |
|||
RETURN |
|||
_Swap PARAM(2) ' Swap two array elements |
|||
PUSH @(a@) |
|||
@(a@) = @(b@) |
|||
@(b@) = POP() |
|||
RETURN |
|||
_InitArray ' Init example array |
|||
PUSH 4, 65, 2, -31, 0, 99, 2, 83, 782, 1 |
|||
FOR i = 0 TO 9 |
|||
@(i) = POP() |
|||
NEXT |
|||
RETURN (i) |
|||
_ShowArray PARAM (1) ' Show array subroutine |
|||
FOR i = 0 TO a@-1 |
|||
PRINT @(i), |
|||
NEXT |
|||
PRINT |
|||
RETURN</lang> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |
||
<lang zkl>fcn heapSort(a){ // in place |
<lang zkl>fcn heapSort(a){ // in place |