shell.pas

来自「Delphi Pascal 数据挖掘领域算法包 数值算法大全」· PAS 代码 · 共 32 行

PAS
32
字号
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;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?