I am trying to code a recursive merge sort. However, as I run the code I found out that the code does not go through the right array. Please help me solve the problem.
void merge_sort_recursive(int *arr, int left, int right) {
int mid;
while (left < right) {
mid = (left + right) / 2;
merge_sort_recursive(arr, left, mid);
merge_sort_recursive(arr, mid + 1, right);
merge_recursive(arr, left, mid, right);
}
for (int i = 0; i < 4; i++)
cout << arr[i] << " ";
cout << endl;
}
void merge_recursive(int *arr, int left, int mid, int right) {
int *buffer = new int[right + 1];
int lPtr = left;
int rPtr = mid + 1;
int bPtr = left;
while (lPtr <= mid && rPtr <= right) {
if (arr[lPtr] < arr[rPtr])
buffer[bPtr++] = arr[lPtr++];
else
buffer[bPtr++] = arr[rPtr++];
}
if (lPtr > mid)
for (int i = rPtr; i <= right; i++)
buffer[bPtr++] = arr[i];
else
for (int i = lPtr; i <= mid; i++)
buffer[bPtr++] = arr[i];
for (int i = left; i <= right; i++)
arr[i] = buffer[i];
}