Implementar el algoritmo de clasificación de conteo en Java
Publicado: 2023-01-30
¿Qué es el algoritmo de clasificación de conteo?
Clasificación por conteo, un algoritmo de clasificación que es eficiente para small ranges of integers . Funciona contando el número de ocurrencias de cada valor en la matriz de entrada y luego usando esa información para colocar cada valor en su posición correcta en la matriz de salida.
La complejidad temporal de este algoritmo es O(n+k) , donde n es el tamaño de la matriz de entrada y k es el rango de los números enteros.
CrunchifyCountingSortAlgo.java
Aquí hay una implementación completa de Counting Sort en Java. Simplemente cópielo en su IDEA preferida y ejecútelo.
paquete crunchify.com.java.tutorials;
importar java.util.Arrays;
/**
* @autor Crunchify.com
* Programa: ¿Cómo implementar el algoritmo de clasificación de conteo en Java?
* Counting sort es un algoritmo de clasificación que ordena los elementos de una matriz
* contando el número de ocurrencias de cada elemento único en la matriz.
*/
clase pública CrunchifyCountingSortAlgo {
public static void main(String[] args) {
// Matriz entera de 10 elementos
int[] crunchifyArray = {9, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3};
crunchifyPrint("Array original: " + Arrays.toString(crunchifyArray));
crunchifyPrint ("\n");
CrunchifyCountingSortAlgo crunchify = new CrunchifyCountingSortAlgo();
crunchify.crunchifyCountingSortAlgorithm(crunchifyArray);
crunchifyPrint ("\n");
crunchifyPrint("Resultado del algoritmo de clasificación de conteo de Crunchify: " + Arrays.toString(crunchifyArray));
}
vacío estático privado crunchifyPrint(String s) {
System.out.println(s);
}
/**
* Autor: Aplicación Shah (Crunchify.com)
*
* Lógica de clasificación de conteo:
* Esta es una implementación de clasificación por conteo, un algoritmo de clasificación que es eficiente para pequeños rangos de números enteros.
* Funciona contando el número de ocurrencias de cada valor en la matriz de entrada,
* y luego usar esa información para colocar cada valor en su posición correcta en la matriz de salida.
* La complejidad temporal de este algoritmo es O(n+k),
* donde n es el tamaño de la matriz de entrada y k es el rango de los enteros.
*/
public static int[] crunchifyCountingSortAlgorithm(int[] crunchifyArray) {
// getAsInt(): si hay un valor presente, devuelve el valor; de lo contrario, lanza NoSuchElementException.
int crunchifyMax = Arrays.stream(crunchifyArray).max().getAsInt();
int[] crunchifyCount = new int[crunchifyMax + 1];
// crunchifyCuenta las ocurrencias de cada valor en la matriz de entrada
for (int i = 0; i < crunchifyArray.length; i++) {
crunchifyCount[crunchifyArray[i]]++;
crunchifyPrint("Agregando 1 a crunchifyCount[" + crunchifyArray[i]
+ "], la matriz crunchifyCount ahora es: " + Arrays.toString(crunchifyCount));
}
crunchifyPrint ("\n");
int k = 0;
para (int i = 0; i <= crunchifyMax; i++) {
for (int j = 0; j < crunchifyCount[i]; j++) {
crunchifyArray[k++] = i;
crunchifyPrint("Agregando " + i + " a la posición " + (k - 1)
+ " en la matriz de salida, la matriz de salida ahora es: " + Arrays.toString(crunchifyArray));
}
}
volver crunchifyArray;
}
}Simplemente ejecute el programa anterior como una aplicación Java en IntelliJ IDEA o Eclipse IDE y obtendrá el siguiente resultado.

Resultado de la consola IntelliJ IDEA
Matriz original: [9, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3] Agregando 1 a crunchifyCount[9], la matriz crunchifyCount ahora es: [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Agregando 1 a crunchifyCount[3], la matriz crunchifyCount ahora es: [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Agregando 1 a crunchifyCount[6], la matriz crunchifyCount ahora es: [0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Agregando 1 a crunchifyCount[6], la matriz crunchifyCount ahora es: [0, 0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Agregando 1 a crunchifyCount[1], la matriz crunchifyCount ahora es: [0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Agregando 1 a crunchifyCount[12], la matriz crunchifyCount ahora es: [0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] Agregando 1 a crunchifyCount[32], la matriz crunchifyCount ahora es: [0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] Agregando 1 a crunchifyCount[29], la matriz crunchifyCount ahora es: [0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1] Agregando 1 a crunchifyCount[2], la matriz crunchifyCount ahora es: [0, 1, 1, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1] Agregando 1 a crunchifyCount[9], la matriz crunchifyCount ahora es: [0, 1, 1, 1, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1] Agregando 1 a crunchifyCount[3], la matriz crunchifyCount ahora es: [0, 1, 1, 2, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1] Agregando 1 a la posición 0 en la matriz de salida, la matriz de salida ahora es: [1, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3] Agregando 2 a la posición 1 en la matriz de salida, la matriz de salida ahora es: [1, 2, 6, 6, 1, 12, 32, 29, 2, 9, 3] Agregando 3 a la posición 2 en la matriz de salida, la matriz de salida ahora es: [1, 2, 3, 6, 1, 12, 32, 29, 2, 9, 3] Agregando 3 a la posición 3 en la matriz de salida, la matriz de salida ahora es: [1, 2, 3, 3, 1, 12, 32, 29, 2, 9, 3] Agregando 6 a la posición 4 en la matriz de salida, la matriz de salida ahora es: [1, 2, 3, 3, 6, 12, 32, 29, 2, 9, 3] Al agregar 6 a la posición 5 en la matriz de salida, la matriz de salida ahora es: [1, 2, 3, 3, 6, 6, 32, 29, 2, 9, 3] Agregando 9 a la posición 6 en la matriz de salida, la matriz de salida ahora es: [1, 2, 3, 3, 6, 6, 9, 29, 2, 9, 3] Al agregar 9 a la posición 7 en la matriz de salida, la matriz de salida ahora es: [1, 2, 3, 3, 6, 6, 9, 9, 2, 9, 3] Agregando 12 a la posición 8 en la matriz de salida, la matriz de salida ahora es: [1, 2, 3, 3, 6, 6, 9, 9, 12, 9, 3] Al agregar 29 a la posición 9 en la matriz de salida, la matriz de salida ahora es: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 3] Agregando 32 a la posición 10 en la matriz de salida, la matriz de salida ahora es: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 32] Resultado del algoritmo de clasificación de conteo de Crunchify: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 32] Proceso finalizado con código de salida 0

Avíseme si tiene algún problema al ejecutar el programa Java Counting Sort Algorithm.
