###### tags: `Pascal Programming D1`
# MergeSortAlgorithm TB P.444
program MergeSortAlgorithm;
const
num = 7;
type
arraytype = array[1..num] of integer;
var
List, TempList : ArrayType;
procedure InputData;
begin
List[1]:=9;
List[2]:=15;
List[3]:=12;
List[4]:=20;
List[5]:=6;
List[6]:=4;
List[7]:=8;
end;
procedure Merge(var A, temp : ArrayType; left, middle, right: integer);
var
pointLow, pointHigh, pointTemp: integer;
highlength: integer;
count: integer;
begin
pointLow:= left;
pointHigh:= middle+1;
pointTemp:= left;
repeat
if A[pointLow]<= A[pointHigh]
then begin
temp[pointTemp]:=A[pointLow];
pointLow:= pointLow+1
end
else begin
temp[pointTemp]:=A[pointHigh];
pointHigh:= pointHigh+1
end;
pointTemp:= pointTemp+1
until (pointLow > middle) or (pointHigh > right);
highlength:= right - middle;
if pointLow > middle
then for count:= pointHigh to right do
temp[count]:= A[count]
else for count:= pointLow to middle do
temp[count + highlight]:= A[count];
for count:= left to right do
A[count]:= temp[count];
end;
procedure MergeSort(var A, temp : arraytype; left, right: integer;
var
middle: integer;
begin
if left < right
then begin
middle:= (left + right) div 2;
MergeSort(A, temp, left, middle);
MergeSort(A, temp, middle+1, right);
Merge(A, temp, left, middle, right);
end;
end;
procedure DisplayList(A: arraytype);
var
count: integer;
begin
for count:= 1 to num do
write(A[count]:3);
writeln;
end;
begin
InputData
write('Before sort: ');
DisplayList(List);
MergeSort(List, TempList, 1, num);
write('After sort: ');
DisplayList(List);
end.