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;