necesito ayuda con el programa de mergesort, si se ejecuta bien pero el que deberia ir en primera posicion lo pone en la segunda y en la primera posicion pone 0, alguna idea del porque?
 import java.io.*;//Libreria De Java Para Ingresar Datos Desde Teclado
class Mergesort1{// Nombre de La Clase
public int mergesort (int v[], int p, int q) 
{ 
// Ordena el fragmento v[p..q] del vector v 
 
if (p < q) 
{ 
int k = (p+q) / 2; // pto. medio del vector 
mergesort (v,p,k); // Ordenando la primera mitad 
mergesort (v,k+1,q); // Ordenando la seguda mitad 
combinar(v,p,k+1,q); // uniendo las dos mitades 
}
 
}
 
private void combinar(int v[], int p, int m, int q) 
{ 
int combinado[] = new int[q-p+1]; 
 
int p1 = p; 
int p2 = m; 
int p3 = 0; 
 
/* combinado[0..p3-1] : cuenta los elementos ordenados de 
v[p..p1-1] y v[m..p2-1] */ 
while (p1 < m && p2 <= q) 
{ 
if (v[p1] < v[p2]) 
{ 
combinado[p3] = v[p1]; 
p1 = p1+1; 
}else 
{ 
combinado[p3] = v[p2]; 
p2 = p2+1; 
} 
p3 = p3+1; 
} 
 
// X: (p1 == m) / (p2 = q+1) 
// Dels seguents bucles, nomes un d'ells s'executara alguna vegada 
// Es posen els elements que resten d'una taula a combinado. 
 
while (p1 < m) 
{ 
combinado[p3] = v[p1]; 
p1 = p1+1; 
p3 = p3+1; 
} 
 
while (p2 <= q) 
{ 
combinado[p3] = v[p2]; 
p2 = p2+1; 
p3 = p3+1; 
} 
 
// Es copia combinado (ja esta ordenat) a v 
for (int i=0; i < q-p+1; i++) 
{ 
v[p+i] = combinado[i]; 
} 
}