Mam wątpliwość, czy aby na pewno ten kod jest poprawny:

void MergeSort(int p, int q)
{
    if (p==q)
        return;
    int s = (p + q) / 2;
    MergeSort(p, s);
    MergeSort(s+1, q);

    int i = p;
    int j = s+1;
    for (int k = p; k <= q; k++)
        if (j>q || ( i<=s && A[i] < A[j] ) )
        {
           B[k] = A[i];
           i++;
        } else
        {
           B[k] = A[j];
           j++;
        }
     for(int k = p ; k <= q; k++)
          A[k] = B[k];
       
} 

Nie jest on mojego autorstwa, ale natrafiłem na niego na platformie e-learning'owej i albo nie mogę pojąc w jaki sposób działa MergeSort, albo coś jest nie tak z kodem.

Już wszystko ok, zaplątałem się w rekurencji :)