¿Qué es la ordenación por combinación?
Merge Sort es el algoritmo más común para ordenar datos utilizando la técnica de " divide y vencerás ". En este algoritmo, el problema se divide en subproblemas y luego, después de ordenarlos, se fusionan. Digamos que tenemos una lista de números sin ordenar, el resultado de una clase para un tema determinado. Para ordenarlos en orden ascendente necesitaremos colocarlos en una lista comenzando de menor a mayor. En este algoritmo Merge Sort, la lista se dividirá en listas más pequeñas para ordenarlas en orden ascendente y luego fusionará los resultados para una mejor comprensión. Merge Sort en Java se puede explicar a través de un ejemplo de una matriz {6,9,8,2,4,1}, considérelo como el resultado de una prueba de clase sobre 10. La matriz (de resultados) se dividirá repetidamente en trozos más pequeños hasta que su tamaño sea 1. Luego, se lleva a cabo el proceso de fusión mientras se clasifican los números simultáneamente. Esto nos proporcionará un resultado que comienza con las notas más bajas hasta las más altas recibidas.
Implementación
En la implementación escribiremos código para el algoritmo de clasificación por combinación en Java. Las variables requeridas serán la matriz de entrada y la longitud de la matriz. Estos dos parámetros se utilizarán además para introducir más parámetros para crear la función de clasificación por combinación. Echemos un vistazo al siguiente fragmento para comprender el funcionamiento general del algoritmo Merge Sort en Java.Merge_Sort_Algo (Array, Beginning, End)
/** Three parameters required for the Merge Sort Algorithm
* Array = values of the array
* Beginning = the starting element of the array
* End = the ending element of the array*/
if (Beginning < End) // condition check Beginning must be less than End
set Middle = (Beginning + End) / 2 // Assigning Middle to the array
Merge_Sort_Algo (Array, Beginning, Middle) /** Sorting and merging of elements from Beginning to the Middle */
Merge_Sort_Algo (Array, Middle +1, End) /** Sorting and merging of elements from Middle to the End */
Merge (Array, Beginning, Middle, End) // Merging both the sorted arrays
end of if
End Merge_Sort_Algo
Primero, a través de la condición if, el principio y el final se utilizan para determinar el medio. Luego, en el siguiente paso, se crean 2 nuevos subarreglos comenzando desde el principio hasta el medio y el otro desde el medio +1 hasta el final. Estas matrices se dividen hasta que su longitud sea 1 y luego, a través de la función de combinación, las submatrices ordenadas Principio, Medio, Medio+1 y Fin se fusionan nuevamente para adquirir la solución.
Ejemplo
El siguiente código en Java explica el algoritmo de clasificación por combinación:import java.util.Arrays;
class HelloWorld {
public static void merge(
int[] array, int[] new_array_1, int[] new_array_2, int left, int right) {
// defining parameters
int i = 0, j = 0, k = 0;
while (i < left && j < right) { // conditions for merging
if (new_array_1[i] <= new_array_2[j]) {
array[k++] = new_array_1[i++];
}
else {
array[k++] = new_array_2[j++];
}
}
while (i < left) {
array[k++] = new_array_1[i++];
}
while (j < right) {
array[k++] = new_array_2[j++];
}
}
public static void mergeSort(int[] array, int length) { /** required parameters */
if (length < 2) { //condition for the length of array
return;
}
int middle = length / 2; // defining new parameter middle
int [ ] new_array_1 = new int [middle]; /** defining the new first array after division */
int [ ] new_array_2 = new int [length - middle]; /** defining the new second array */
for (int i = 0; i < middle; i++) { /**applying condition for sorting of new array 1 */
new_array_1 [ i ] = array [ i ];
}
for (int i = middle; i < length ; i++) { /**applying condition for sorting of new array 2 */
new_array_2 [ i - middle] = array [ i ];
}
mergeSort (new_array_1, middle); /** calling merge sort function for new array 1 */
mergeSort (new_array_2, length - middle); /** calling merge sort function for new array 2 */
merge(array, new_array_1, new_array_2, middle, length - middle); /** calling function for merging of new array 1 and new array 2 */
}
public static void main(String[] args) {
int [ ] testScores = {6,9,8,2,4,1};
int size = testScores.length;
System.out.println("Original Array " + Arrays.toString(testScores) + "\n");
mergeSort(testScores, size);
System.out.println("After Merge Sort " + Arrays.toString(testScores) + "\n");
}
}
Producción
Matriz original [6, 9, 8, 2, 4, 1] Después de ordenar por combinación [1, 2, 4, 6, 8, 9]
GO TO FULL VERSION