Sorting algorithms/Heapsort: Difference between revisions
Added uBasic/4tH version
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:
: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}}==
<lang zkl>fcn heapSort(a){ // in place
|