MergeSort(numbers - address to integer array, first - integer, last - integer)
integer middle
if first < last then
middle = (first + last) / 2
MergeSort (numbers, first, middle)
MergeSort(numbers, middle +1, last)
Merge(numbers, first, middle, middle+1, last)
end if
end MergeSort
Merge (numbers, leftFirst, leftLast, rightFirst, rightLast)
tempArray - integer array big enough to hold rightLast - leftFirst + 1 elements
integer index, saveFirst, index2
index = 0
saveFirst = leftFirst
while (leftFirst <= leftLast AND rightFirst <= rightLast) do
if numbers[leftFirst] < numbers[rightFirst] then
tempArray[index] = numbers[leftFirst]
leftFirst = leftFirst + 1
else
tempArray[index] = numbers[rightFirst]
rightFirst = rightFirst + 1
end if
index = index + 1
end while
while leftFirst <= leftLast do
tempArray[index] = numbers[leftFirst]
index = index + 1
leftFirst = leftFirst + 1
end while
while rightFirst <= rightLast do
tempArray[index] = numbers[rightFirst]
index = index + 1
rightFirst = rightFirst + 1
end while
index2 = 0
for index = saveFirst to rightLast do
numbers[index] = tempArray[index]
index2 = index2 + 1
end for
end Merge