Problema MergeSort

Bueno no se si esto va aqui pero alla voy.

Tengo que implementar el metodo de ordenacion mergeSort con dos Arrays de Ints de forma recurisva en C# y tengo un pequeño problema.Por mas que lo miro y miro y debugo no encuentro la razon.A veces cambia un numero por un 0.Sin mas dilacion os dejo el codigo

static int[] MergeSort(int[]t)
{
int[] resultat;
int aux;
if (t.Length<=2)
{
if (t.Length == 2)
{
if (t[0] > t[1])
{
aux = t[1];
t[1] = t[0];
t[0] = aux;
}
}
resultat = t;
}
else
{
int[] tAux=new int[t.Length/2];
int[] tAux2 = new int[t.Length - tAux.Length];
Array.Copy(t, 0, tAux, 0, tAux.Length);
Array.Copy(t, t.Length / 2, tAux2, 0, tAux2.Length);
tAux = MergeSort(tAux);
tAux2 = MergeSort(tAux2);
resultat = taulaFusionada(tAux, tAux2);
}
return resultat;
}
Ya se que es una chapuza,seria muy facil cojer los miles de algoritmos que estan por internet y copiarlos,pero es para clase y me gustaria hacerlo bien.Entre copiarlo entero y pedir un poco de ayuda pues prefiero lo segundo XD

Comentar que la funcio Copy de la clase Array como bien dice su nombre copia un Array a otro,en resumidas cuentas le paso el array de origen,el indice desde donde partiremos,el array destino,el indice inicial del array de destino y la longitud del array de destino.

No creo que el problema sea de la parte del Merge(la funcion TaulaFusionada)porque esta testeada a parte y funciona bien.
Programais en catalán xDDD

Prueba a cambiar:

Array.Copy(t, 0, tAux, 0, tAux.Length);
Array.Copy(t, t.Length / 2, tAux2, 0, tAux2.Length);

por

Array.Copy(t, 0, tAux, 0, (tAux.Length -1));
Array.Copy(t, ((t.Length / 2) - 1), tAux2, 0, (tAux2.Length -1));


EDIT: Por otro lado, no se si esto va en PC-General o PC-Software Libre, pero creo que en el de software libre se habla más de este tipo de temas.
Gracias por la ayuda,al final lo que si estaba mal era el Merge.

PD:Si se nos cuelan muchos nombres de variables y de funciones en catalan XD
2 respuestas