二路归并的Mergre函数哪里错了?

#include
#include
#define Max 50000 /*N为数据量大小*/

void MergeSort(int R[], int N, int low, int high); //二路归并排序,R中具有N个元素,该函数实现对R中R[low]...R[high]进行升序排序
void Merge(int R[], int N, int u, int m, int v);//将有序段R[u..m],R[m+1..v]归并到R[u..v]
void Print(int R[], int N);

int main()
{
int* R, N, i; /*数据存储在R[1]...R[N]中*/
scanf_s("%d", &N);
R = (int*)malloc((N + 1) * sizeof(int));
for (i = 1; i <= N; i++)
scanf_s("%d", &R[i]);
MergeSort(R, N, 1, N);
Print(R, N);
return 0;
}

void Print(int R[], int N)
{
int i;
for (i = 1; i < N; i++)
printf("%d,", R[i]);
printf("%d\n", R[N]);
}

void MergeSort(int R[], int N, int low, int high)
{
int mid;
if (low < high)
{
mid = (low + high) / 2;
MergeSort(R, N, low, mid);
MergeSort(R, N, mid + 1, high);
Merge(R, N, low, mid, high);
}
}
void Merge(int R[], int N, int u, int m, int v)//将有序段R[u..m],R[m+1..v]归并到R[u..v]
{

int f[200];
int i = u, j = m+1, g,k=0;
while (i <= m && j <= v)
{
    if (R[i] <= R[j])
        f[k++] = R[i++];
    else
        f[k++] = R[j++];
}
if (i <= m)
{
    for (g = i; g <= m; k++, g++)
        f[k] = R[g];
}
else
{
    for (g=j;g<=v;g++,k++)
        f[k] = R[g];
}
for (k = 0; k < (v - u + 1 );u++,k++)
    R[u] = f[k];

}
//输入为10

121 924 447 271 787 717 127 34 63 296

https://blog.csdn.net/shuzhongke123/article/details/51914148