Was meinst Du mit 'Optimierungsbedarf'?
Performancetechnisch könnte man die alte Weisheit aufgreifen, das z.B. ein Straight Insertion Sort für kleine Listen schneller ist. Dann würde man dieses Verfahren anwenden, wenn Ende-Start < 20 ist. Wobei "20" ein eher willkürlicher Wert ist, welchen es zu verifizieren gilt. Es könnte auch andere Verfahren geben (außer SIS), die für kleine N besser sind.
Früher waren echt rekursive Implementierungen immer etwas langsamer als ihre (nun ja) iterative Alternative. Diese 'iterative' Implementierung hat aber auch nichts anderes gemacht, als sich den Stack zu merken.
Mittlerweile ist dies aber nicht mehr so.
Von der Lesbarkeit würde ich persönlich die 'begin/end' wegnehmen, wenn sie nur einen Befehl umschließen, also
Delphi-Quellcode:
if something then
begin
DoIt;
end;
// umwandeln in
if something then
DoIt;
Weiterhin würde ich refaktorisieren, d.h. das Mergesort in seine logischen Bestandteile aufteilen:
1. Divide
2. Sort parts
3. Recombine (aka Merge)
Das ist zwar 'nur' Kosmetik, aber darum gehts ja letztendlich: Lesbarkeit und Ästhetik.