Merge sort using Templates #include #include template void mergeSort(T numbers[], T temp[], int array_size) { m_sort(numbers, temp, 0, array_size - 1); } template void m_sort(T numbers[], T temp[], int left, int right) { int mid; if (right > left) { mid = (right + left) / 2; m_sort(numbers, temp, left, mid); m_sort(numbers, temp, (mid+1), right); merge(numbers, temp, left, (mid+1), right); } } template void merge(T numbers[], T temp[], int left, int mid, int right) { int i, left_end, num_elements, tmp_pos; left_end = (mid - 1); tmp_pos = left; num_elements = (right - left + 1); while ((left <= left_end) && (mid <= right)) { if (numbers[left] <= numbers[mid]) { temp[tmp_pos] = numbers[left]; tmp_pos += 1; left += 1; } else { temp[tmp_pos] = numbers[mid]; tmp_pos += 1; mid += 1; } } while (left <= left_end) { temp[tmp_pos] = numbers[left]; left += 1; tmp_pos += 1; } while (mid <= right) { temp[tmp_pos] = numbers[mid]; mid += 1; tmp_pos += 1; } for (i=0; i < num_elements; i++) { numbers[right] = temp[right]; right -= 1; } } int main() { clrscr(); int intArr[5] = {65, 72, 105, 55, 2}; int intArrTwo[5]; mergeSort(intArr, intArrTwo,5); for ( int i = 0; i < 5; i++) { cout <