Since the description of the program is missing and no description of errors is given, the help here is unnecessarily complicated. The function is obviously a merge sort algorithm.
As an error it is immediately noticeable that various arrays in C++ do not work like this. In the first place code is used that tries to declare an array with a variable. This might work with C, but not with C++. Here e.g. new() could help.
int *lower = new int[n1];
int *higher = new int[n2];
Further down, a field is declared with a constant that could obviously become too large.
int numel, arr[11], sz;
if (numel >= 5 && numel <= 12) {
for (int i = 0; i < numel; i++)
cin >> arr[i];
}
Apparently the program is not complete, because at the end some things seem to be missing. The sorting function seems to work at first sight.
Note: Converting a very common sorting algorithm into another language does not seem to make sense except for practice. On the German Wikipedia page you can find e.g. also a version in Java. An iterative implementation using chained lists would also be much more readable in C++.
Mergesort – Wikipedia[
^]