diff options
| author | deadmarshal <adeadmarshal@gmail.com> | 2024-05-06 13:52:34 -0400 |
|---|---|---|
| committer | deadmarshal <adeadmarshal@gmail.com> | 2024-05-06 13:52:34 -0400 |
| commit | c10547930f74a02aa336b815e6c03546ba4072a1 (patch) | |
| tree | 08ec5f0d991f27e05dbeb5079346e779d01b47d0 /challenge-268/deadmarshal/modula-3/ch2/src/Sorting.mg | |
| parent | 479ca4e9c71aa2ea5be2bc7b66451c21be9d8dde (diff) | |
| download | perlweeklychallenge-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.mg | 31 |
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. + |
