--- 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);