Sorting algorithms/Heapsort: Difference between revisions

m (Added the Sidef language)
Line 162:
New_Line;
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}}==
Anonymous user