home *** CD-ROM | disk | FTP | other *** search
- PROCEDURE shell(n: integer; VAR arr: glnarray);
- (* Programs using routine SHELL must define the type
- TYPE
- glnarray = ARRAY [1..np] OF real;
- in the main routine, with np >= n. *)
- LABEL 3;
- CONST
- aln2i=1.442695022;
- tiny=1.0e-5;
- VAR
- nn,m,lognb2,l,k,j,i: integer;
- t: real;
- BEGIN
- lognb2 := trunc(ln(n)*aln2i+tiny);
- m := n;
- FOR nn := 1 TO lognb2 DO BEGIN
- m := m DIV 2;
- k := n-m;
- FOR j := 1 TO k DO BEGIN
- i := j;
- 3: l := i+m;
- IF (arr[l] < arr[i]) THEN BEGIN
- t := arr[i];
- arr[i] := arr[l];
- arr[l] := t;
- i := i-m;
- IF (i >= 1) THEN GOTO 3
- END
- END
- END
- END;
-