I'm hitting a wall with this. I'm trying to implement merge sort to an existing program. (one that utilizes serveral search algorithms) but I'm unable to get the program to sort correctly. The rest of the program works correctly as i've tested with other sort algorithms.

Merge sort code

Code:

int mergesort (int a[], int p, int r)
{
int i;
int q;
double x=(p+r)/2;
if (p<r)
{
q= floor (x);
mergesort (a,p,q);
mergesort (a,q+1,r);
merge(a,p,q,r);
cout << "\n";
}
return 0;
}
int merge (int a[], int p, int q, int r)
{
int k=p;
int i=0;
int l=q-1;
int t[r];
while ((p<=l)&&(q<=r))
{
if (a[p]<=a[q])
{
t[i]=a[p];
i++;
p++;
}
else
{
t[i]=a[q];
i++;
q++;
}
}
while (p<=l)
{
t[i]=a[p];
i++;
p++;
}
while (q<=r)
{
t[i]=a[q];
i++;
q++;
}
for (i=k; i<=r; i++)
{
a[i]=t[i-k];
}
return 0;
}

Here's my current input/ output arrays

Code:

Input
5 8 85 9 78 34 2 6 31 56 7 16 89 476 84 8 22 65 900 76
output
5 8 34 2 6 31 56 7 78 16 84 65 76 85 9 89 476 8 22 900

I can see that it's trying to do some sorting, but it's not fully sorting the data.

Any help would be appreciated.