home *** CD-ROM | disk | FTP | other *** search
- PROCEDURE SHELLSORT(VAR SORTBUF : KEYARRAY; RECS : INTEGER);
-
- VAR I,J,K,L : INTEGER;
- SPREAD : INTEGER;
-
-
- PROCEDURE INT_SWAP(VAR RR,SS : KEYREC);
-
- VAR T : KEYREC;
-
- BEGIN
- T := RR;
- RR := SS;
- SS := T
- END;
-
-
- BEGIN
- SPREAD := RECS DIV 2; { First spread is half record count }
- WHILE SPREAD > 0 DO { Do until spread goes to zero: }
- BEGIN
- FOR I := SPREAD + 1 TO RECS DO
- BEGIN
- J := I - SPREAD;
- WHILE J > 0 DO
- BEGIN { Test & swap across the array }
- L := J + SPREAD;
- IF SORTBUF[J].KEY <= SORTBUF[L].KEY THEN J := 0 ELSE
- INT_SWAP(SORTBUF[J],SORTBUF[L]);
- J := J - SPREAD
- END
- END;
- SPREAD := SPREAD DIV 2 { Halve spread for next pass }
- END
- END;