Ordenar arreglos es una de las operaciones más comunes que un principiante de Java debería saber hacer. Aunque las matrices no siempre son la forma más conveniente de organizar los datos y esto se aplica principalmente a números pequeños, el concepto detrás de la clasificación de matrices tiene toneladas de aplicaciones en software complejo y ciencia de datos. En esta publicación, veremos más de cerca qué es el ordenamiento por inserción. Incluimos algunos ejemplos y problemas de práctica para ayudarlo a familiarizarse completamente con este concepto.
¿Qué es la ordenación por inserción?
Básicamente, la ordenación por inserción es un algoritmo que usan los desarrolladores para organizar cadenas de números pequeños. Divide todos los valores en dos pilas: una ordenada y otra sin ordenar. Uno por uno, los números de la pila "sin ordenar" se seleccionan y se colocan en el orden correcto. Echemos un vistazo más de cerca a la entrada y la salida del ordenamiento por inserción:- Entrada: una matriz A con elementos numéricos no ordenados: A[0,1, n, n-2...].
- Salida: una matriz que contiene los mismos números pero completamente ordenada. Este se suele denominar B: B[0]B[1]...B[n-1].
- Clasificación numérica (orden creciente): [1, 2, 3, 4, 5]
- Clasificación numérica (orden decreciente): [5, 4, 3, 2, 1]
- Clasificación alfabética: [a, b, c, d]
Comprender la teoría de la ordenación por inserción
Antes de explorar el código detrás de la ordenación por inserción, analicemos el algoritmo utilizando un lenguaje no técnico. Debido a que mostraremos el código para clasificar en orden ascendente, tiene sentido explicar el algoritmo paso a paso en esta publicación. Paso 1. Iterar entrearr[1]
y arr[n]
dónde n
es un valor numérico generalmente menor que 10. Paso 2. Comparar el elemento que eligió (conocido como key
) con el número anterior en la secuencia usando el sort()
método. Paso 3. Si todos los elementos son más pequeños que sus sucesores, repite la comparación hasta que encuentres un valor mayor. Paso 4. Intercambie un valor mayor una posición más allá del menor para crear una secuencia ordenada. Paso 5. Repite el proceso hasta que obtengas una cadena ordenada de caracteres
Ordenar matrices primitivas
Dado que el algoritmo es una de las operaciones de Java más sencillas, incluso los principiantes no deberían tener muchos problemas para implementarlo. Aquí hay una guía paso a paso para ordenar una matriz1. Declarar una matriz para la clasificación
Para empezar, creemos una cadena de valores que luego mostraremos usando Java. Para usar la ordenación por inserción, debe crear una matriz. Para eso, usaint[]
int[] arrayA = {10, 14, 20, 30};
2. Usa sort_arr para implementar el algoritmo
El método sort_arr es una de las formas más comunes de implementar la ordenación por inserción. En la práctica, se ve así:
for(int i=0; i< sort_arr.length; ++i){
int j = i;
3. Crea un bucle y un iterador
Mediante el uso de un bucle en el algoritmo de clasificación por inserción, los desarrolladores no tienen que repetir la lógica para cada elemento. Aunque la creación de bucles parece compleja, es bastante simple. He aquí un ejemplo:
for(int i=0; i< sort_arr.length; ++i){
Ahora que tiene un bucle en funcionamiento, es hora de crear un iterador que ordenará todos los elementos en el orden deseado. De ahora en adelante, nos referiremos al iterador como " j
".
int j = i;
4. Crear un "bucle while"
Cuando se trata de ordenar por inserción, un ciclo "while" es esencial para una nueva matriz ordenada. Para configurarlo para una clasificación de inserción de orden ascendente, un desarrollador debe cumplir con dos condiciones:- El valor asignado a j tiene que ser mayor que 0
- El valor asignado a
j-1
debe ser mayor que elj
índice
j
índice.
5. Ordenar la matriz
Después de configurar el ciclo while, los valoresj
y j-1
se intercambiarán hasta que una o ambas condiciones en el ciclo while fallen. De manera similar, la clasificación se repetirá para cada valor en el bucle for hasta que las condiciones del bucle for fallen también. Así es como funciona el proceso de clasificación por inserción en la práctica:
int key = sort_arr[j];
sort_arr[j] = sort_arr[j-1];
sort_arr[j-1] = key;
j = j-1;
Ordenar una ArrayList
Si bien es importante comprender las matemáticas detrás de la ordenación por inserción, cuando se trata del desarrollo de software de la vida real, ordenará ArrayLists mucho más que secuencias en matrices primitivas. Aquí hay una guía paso a paso para ordenar una ArrayList:- Cree una nueva
Element
clase para los elementos que pertenecen a la colección.public class Element { private int id; public Element(int id) { this.id = id; }
- Dentro de una colección, hay un
compareTo()
método: lo usaremos para comparar los identificadores de dos elementos.public int compareTo(Element element) { int res = 0; if (this.id < element.getId()) { res = -1; } if (this.id > element.getId()) { res = 1; } return res; } }
- Aplique el algoritmo y cree algunos bucles para ordenar los objetos
ArrayList
en lugar de compararlos.public static void insertionSortArrayList(List<element> list) { for (int j = 1; j < list.size(); j++) { Element current = list.get(j); int i = j-1; while ((i > -1) && ((list.get(i).compareTo(current)) == 1)) { list.set(i+1, list.get(i)); i--; } list.set(i+1, current); } }
ArrayList
También puede agregar más elementos , como se muestra a continuación:List<element> list = new ArrayList<>(); // Create elements w/ IDs 0-24 for (int i = 0; i < 25; i++) { list.add(new Element(i)); } // To use insertion sort, shuffle the values Collections.shuffle(list);
- Ahora es el momento de ordenar:
// This helps print values before sorting list.forEach(e -> System.out.print(e.getId() + ", ")); // Sort the list insertionSortArrayList(list); System.out.println(); // Display a sorted array list.forEach(e -> System.out.print(e.getId() + ", "));
- Ahora comparemos la entrada y la salida para asegurarnos de que no cometimos errores. Aquí está la comparación de la cadena que usamos como ejemplo.
4, 2, 6, 7, 0, 5, 9, 1, 8, 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
GO TO FULL VERSION