perm filename HEAP.SAI[GEM,BGB] blob sn#092049 filedate 1974-03-14 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN	"HEAP SORT"
C00004 ENDMK
C⊗;
BEGIN	"HEAP SORT"
	REQUIRE "ABBREV[SYS,BGB]" SOURCE_FILE;
	PRELOAD_WITH
	'364017537,'364017550,'737017561,
	'375017572,'272017603,'575017614,
	'255017625,'255017636,'255017647;
	INTEGER ARRAY A[1:9];

PROCEDURE HEAPSORT (INTEGER ARRAY A; INTEGER N);
BEGIN	"HEAPSORT"
	INTEGER I,J,K;
	INTEGER X,Q;
α PHASE ONE, PUT 'EM UNDER THE HEAP & BIGGIES TRICKLE UP;
	FOR K←2 STEP 1 UNTIL N DO
	BEGIN
		I←K;
		X←A[K];
		WHILE I>1 ∧ X>A[J←I%2] DO
		BEGIN A[I]←A[J]; I←J END;
		A[I]←X;
	END;
α INTERMEDIATE RESULTS;
	FOR I←1 STEP 1 UNTIL 9 DO
	OUTSTR(↓&CVOS(A[I]));OUTSTR(↓);
α PHASE TWO, TAKE 'EM OFF THE TOP & PROMOTE SUBORDINATES;
	FOR K←N STEP -1 UNTIL 2 DO
	BEGIN
		X←A[K];A[K]←A[1];I←1;
		WHILE (J←2*I)<K DO
		BEGIN
			IF A[J+1]>A[J] ∧ (J+1)<K THEN J←J+1;
			IF X≥A[J] THEN DONE ELSE
			BEGIN A[I]←A[J];I←J;END;
		END;
		A[I]←X;
	END;
END	"HEAPSORT";

	INTEGER Q;
	HEAPSORT(A,9);

	FOR Q←1 STEP 1 UNTIL 9 DO
	OUTSTR(↓&CVOS(A[Q]));OUTSTR(↓);

OUTSTR("	END OF SORT.
");	INCHRW;
END	"HEAP SORT";