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];
}
}