aboutsummaryrefslogtreecommitdiff
path: root/challenge-268/deadmarshal/modula-3/ch2/src/Sorting.mg
diff options
context:
space:
mode:
authordeadmarshal <adeadmarshal@gmail.com>2024-05-06 13:52:34 -0400
committerdeadmarshal <adeadmarshal@gmail.com>2024-05-06 13:52:34 -0400
commitc10547930f74a02aa336b815e6c03546ba4072a1 (patch)
tree08ec5f0d991f27e05dbeb5079346e779d01b47d0 /challenge-268/deadmarshal/modula-3/ch2/src/Sorting.mg
parent479ca4e9c71aa2ea5be2bc7b66451c21be9d8dde (diff)
downloadperlweeklychallenge-club-c10547930f74a02aa336b815e6c03546ba4072a1.tar.gz
perlweeklychallenge-club-c10547930f74a02aa336b815e6c03546ba4072a1.tar.bz2
perlweeklychallenge-club-c10547930f74a02aa336b815e6c03546ba4072a1.zip
TWC268
Diffstat (limited to 'challenge-268/deadmarshal/modula-3/ch2/src/Sorting.mg')
-rw-r--r--challenge-268/deadmarshal/modula-3/ch2/src/Sorting.mg31
1 files changed, 31 insertions, 0 deletions
diff --git a/challenge-268/deadmarshal/modula-3/ch2/src/Sorting.mg b/challenge-268/deadmarshal/modula-3/ch2/src/Sorting.mg
new file mode 100644
index 0000000000..cf0dbd6b4a
--- /dev/null
+++ b/challenge-268/deadmarshal/modula-3/ch2/src/Sorting.mg
@@ -0,0 +1,31 @@
+GENERIC MODULE Sorting(Elem);
+
+PROCEDURE Swap(VAR A,B:Elem.T) =
+ VAR Temp:Elem.T := A;
+ BEGIN
+ A := B;
+ B := Temp
+ END Swap;
+
+PROCEDURE QuickSort(VAR A:ARRAY OF Elem.T;Left,Right:INTEGER) =
+ VAR
+ I,J:INTEGER;
+ Pivot:Elem.T;
+ BEGIN
+ I := Left; J := Right;
+ Pivot := A[(Left+Right) DIV 2];
+ REPEAT
+ WHILE Elem.Compare(Pivot,A[I]) > 0 DO INC(I) END;
+ WHILE Elem.Compare(Pivot,A[J]) < 0 DO DEC(J) END;
+ IF I <= J THEN
+ Swap(A[I],A[J]);
+ INC(I); DEC(J)
+ END;
+ UNTIL I > J;
+ IF Left < J THEN QuickSort(A,Left,J) END;
+ IF I < Right THEN QuickSort(A,I,Right) END
+ END QuickSort;
+
+BEGIN
+END Sorting.
+