Sorting algorithms/Heapsort: Difference between revisions
Content added Content deleted
m (Added the Sidef language) |
|||
Line 162: | Line 162: | ||
New_Line; |
New_Line; |
||
end Test_Generic_Heapsort;</lang> |
end Test_Generic_Heapsort;</lang> |
||
=={{header|ALGOL 68}}== |
|||
<lang algol68>#--- Swap function ---# |
|||
PROC swap = (REF []INT array, INT first, INT second) VOID: |
|||
( |
|||
INT temp := array[first]; |
|||
array[first] := array[second]; |
|||
array[second]:= temp |
|||
); |
|||
#--- Heap sort Move Down ---# |
|||
PROC heapmove = (REF []INT array, INT i, INT last) VOID: |
|||
( |
|||
INT index := i; |
|||
INT larger := (index*2); |
|||
WHILE larger <= last DO |
|||
IF larger < last THEN IF array[larger] < array[larger+1] THEN |
|||
larger +:= 1 |
|||
FI FI; |
|||
IF array[index] < array[larger] THEN |
|||
swap(array, index, larger) |
|||
FI; |
|||
index := larger; |
|||
larger := (index*2) |
|||
OD |
|||
); |
|||
#***************************************************************# |
|||
#--- Heap sort ---# |
|||
PROC heapsort = (REF []INT array) VOID: |
|||
( |
|||
FOR i FROM ENTIER((UPB array) / 2) BY -1 WHILE |
|||
heapmove(array, i, UPB array); |
|||
i > 1 DO SKIP OD; |
|||
FOR i FROM UPB array BY -1 WHILE |
|||
swap(array, 1, i); |
|||
heapmove(array, 1, i-1); |
|||
i > 1 DO SKIP OD |
|||
); |
|||
#***************************************************************# |
|||
main: |
|||
( |
|||
[10]INT a; |
|||
FOR i FROM 1 TO UPB a DO |
|||
a[i] := ROUND(random*100) |
|||
OD; |
|||
print(("Before:", a)); |
|||
print((newline, newline)); |
|||
heapsort(a); |
|||
print(("After: ", a)) |
|||
)</lang> |
|||
{{out}} |
|||
<pre> |
|||
Before: +633 +972 +136 +494 +720 +326 +813 +980 +784 +760 |
|||
After: +136 +326 +494 +633 +720 +760 +784 +813 +972 +980 |
|||
</pre> |
|||
=={{header|AutoHotkey}}== |
=={{header|AutoHotkey}}== |