Switch to side-by-side view

--- a/SortLib.mod
+++ b/SortLib.mod
@@ -43,6 +43,7 @@
   (* 13.04.16, MRi: Erstellen der Routinen aus N. Wirth A.&D.               *)
   (* 14.05.16, MRi: Zusammenfassen in SortLib                               *)
   (* 05.10.17, MRi: CVecPerm eingefuegt                                     *)
+  (* 08.12.18, MRi: ShellMetznerSort eingefuegt                             *)
   (*------------------------------------------------------------------------*)
   (* Implementation : Michael Riedl                                         *)
   (* Licence        : GNU Lesser General Public License (LGPL)              *)
@@ -190,6 +191,31 @@
         END
       END
 END ShellSort;
+
+PROCEDURE ShellMetznerSort(VAR X : ARRAY OF LONGREAL;
+                               N : CARDINAL);
+
+          VAR i,j,inc : CARDINAL;
+              tmp     : LONGREAL;
+BEGIN
+       inc := 1;
+       REPEAT (* calculate the increment *)
+         inc := 3*inc + 1;
+       UNTIL (inc > N);
+
+       REPEAT
+         inc := inc DIV 3;
+         FOR i:=inc TO N-1 DO
+           tmp := X[i];
+           j   := i;
+           WHILE (j >= inc) AND (X[j-inc] >= tmp) DO
+             X[j] := X[j-inc];
+             DEC(j,inc);
+           END;
+           X[j] := tmp;
+         END; (* FOR *)
+       UNTIL (inc <= 1);
+END ShellMetznerSort;
 
 PROCEDURE HeapSort(VAR A : ARRAY OF LONGREAL;
                        n : INTEGER);