50 lines
1.4 KiB
Plaintext
50 lines
1.4 KiB
Plaintext
public void merge() {
|
|
// Crear un array temporario para trabajar.
|
|
int[] temp = new int[elementos];
|
|
// Llamar al metodo recursivo.
|
|
recMergeSort(temp, 0, elementos - 1);
|
|
}
|
|
|
|
private void recMergeSort(int[] temp, int izquerda, int derecha) {
|
|
if (izquerda != derecha) {
|
|
int medio = (izquerda + derecha) / 2;
|
|
// Trabajar con los valores en el lado izquerdo.
|
|
recMergeSort(temp, izquerda, medio);
|
|
// Trabajar con los valores en el lado derecha.
|
|
recMergeSort(temp, medio + 1, derecha);
|
|
// Unir los valores.
|
|
merge(temp, izquerda, medio + 1, derecha);
|
|
}
|
|
}
|
|
|
|
private void merge(int[] temp, int prevIzquerda, int prevMedio, int derecha) {
|
|
int j = 0;
|
|
int izquerda = prevIzquerda;
|
|
int medio = prevMedio - 1;
|
|
int masDerecha = derecha - izquerda + 1;
|
|
|
|
while (prevIzquerda <= medio && prevMedio <= derecha) {
|
|
// Poner un valor en el array temporario.
|
|
if (array[prevIzquerda] < array[prevMedio]) {
|
|
temp[j++] = array[prevIzquerda++];
|
|
}
|
|
else {
|
|
temp[j++] = array[prevMedio++];
|
|
}
|
|
}
|
|
|
|
while (prevIzquerda <= medio) {
|
|
// Mientras que el valor previos de izquerda es menor que el medio correr los valores.
|
|
temp[j++] = array[prevIzquerda++];
|
|
}
|
|
|
|
while (prevMedio <= derecha) {
|
|
// Mientras que el valor previos de derecha es menor que el medio correr los valores.
|
|
temp[j++] = array[prevMedio++];
|
|
}
|
|
|
|
for (j = 0; j < masDerecha; j++) {
|
|
// Copiar los valores al array real.
|
|
array[izquerda + j] = temp[j];
|
|
}
|
|
} |