Estructuras_de_Datos/src/cl/cromer/estructuras/code/merge/ordenar

50 lines
1.6 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];
}
}