Sorting algorithms/Heapsort: Difference between revisions
Content added Content deleted
Drkameleon (talk | contribs) (Added Arturo implementation) |
(Sorting algorithms/Heapsort en True BASIC) |
||
Line 5,185: | Line 5,185: | ||
:DelVar L<sub>3</sub> |
:DelVar L<sub>3</sub> |
||
:Return |
:Return |
||
=={{header|True BASIC}}== |
|||
{{trans|Liberty BASIC}} |
|||
<lang qbasic> |
|||
!creamos la matriz y la inicializamos |
|||
LET lim = 20 |
|||
DIM array(20) |
|||
FOR i = 1 TO lim |
|||
LET array(i) = INT(RND * 100) + 1 |
|||
NEXT i |
|||
SUB printArray (lim) |
|||
FOR i = 1 TO lim |
|||
!PRINT using("###", array(i)); |
|||
PRINT array(i); " "; |
|||
NEXT i |
|||
PRINT |
|||
END SUB |
|||
SUB heapify (count) |
|||
LET start = INT(count / 2) |
|||
DO WHILE start >= 1 |
|||
CALL siftDown (start, count) |
|||
LET start = start - 1 |
|||
LOOP |
|||
END SUB |
|||
SUB siftDown (inicio, final) |
|||
LET root = inicio |
|||
DO WHILE root * 2 <= final |
|||
LET child = root * 2 |
|||
LET SWAP = root |
|||
IF array(SWAP) < array(child) THEN |
|||
LET SWAP = child |
|||
END IF |
|||
IF child+1 <= final THEN |
|||
IF array(SWAP) < array(child+1) THEN |
|||
LET SWAP = child + 1 |
|||
END IF |
|||
END IF |
|||
IF SWAP <> root THEN |
|||
CALL SWAP (root, SWAP) |
|||
LET root = SWAP |
|||
ELSE |
|||
EXIT SUB |
|||
END IF |
|||
LOOP |
|||
END SUB |
|||
SUB SWAP (x,y) |
|||
LET tmp = array(x) |
|||
LET array(x) = array(y) |
|||
LET array(y) = tmp |
|||
END SUB |
|||
SUB heapSort (count) |
|||
CALL heapify (count) |
|||
PRINT "el montículo:" |
|||
CALL printArray (count) |
|||
LET final = count |
|||
DO WHILE final > 1 |
|||
CALL SWAP (final, 1) |
|||
CALL siftDown (1, final-1) |
|||
LET final = final - 1 |
|||
LOOP |
|||
END SUB |
|||
!-------------------------- |
|||
PRINT "Antes de ordenar:" |
|||
CALL printArray (lim) |
|||
PRINT |
|||
CALL heapSort (lim) |
|||
PRINT |
|||
PRINT "Despues de ordenar:" |
|||
CALL printArray (lim) |
|||
END |
|||
</lang> |
|||
=={{header|uBasic/4tH}}== |
=={{header|uBasic/4tH}}== |