{
{
//Gọi các hàm mergesort ở đây
}
// method to call merge sort:
{
m_sort(numbers, temp, 0, array_size - 1);
}
// helper method to include two bound
{
{
// first devide the array in two parts
mid = (right + left) / 2;
// then recursively sort each half til right == left
m_sort(numbers, temp, left, mid);
m_sort(numbers, temp, mid+1, right);
// merge them back, now that two half are sorted:
merge(numbers, temp, left, mid+1, right);
}
}
// merge two array:
{
int i, left_end, num_elements, tmp_pos
;
left_end = mid - 1;
tmp_pos = left;
num_elements = right - left + 1;
// walk through each, put the smallest left-over in either left side
// or right side to the temp array in each iteration.
while ((left
<= left_end
) && (mid
<= right
)) {
if (numbers
[left
] <= numbers
[mid
]) {
temp[tmp_pos] = numbers[left];
tmp_pos = tmp_pos + 1;
left = left +1;
}
{
temp[tmp_pos] = numbers[mid];
tmp_pos = tmp_pos + 1;
mid = mid + 1;
}
}
// then put the left over in the two array, if any.
{
temp[tmp_pos] = numbers[left];
left = left + 1;
tmp_pos = tmp_pos + 1;
}
{
temp[tmp_pos] = numbers[mid];
mid = mid + 1;
tmp_pos = tmp_pos + 1;
}
// copy the array back to its original array:
for (i
=0; i
<= num_elements
; i
++) {
numbers[right] = temp[right];
right = right - 1;
}
}
}