El tipo de contar es un algoritmo de clasificación estable. La clasificación de conteo usa una matriz adicional Count_arr, donde el elemento I-Th es el número de elementos con un valor igual a i en la matriz ARR a clasificar. Luego, de acuerdo con el conteo de matriz, los elementos en ARR están dispuestos a la posición correcta.
Se divide en cuatro pasos:
1. Encuentre los elementos más grandes y más pequeños de la matriz para clasificarse
2. Estadísticas El número de veces cada elemento con un valor de I aparece en la matriz, y guarde el elemento i-th de la matriz count_arr
3. Acumular todos los recuentos (a partir del primer elemento en Count_arr, cada elemento y el elemento anterior se agregan)
4. Atraviese reversamente la matriz original: coloque cada elemento I en el elemento Count_arr (i) de la nueva matriz, y reste Count_arr (i) por 1 para cada elemento.
Ejemplo:
La copia del código es la siguiente:
/**
* La clasificación de recuento es un algoritmo de clasificación no basado en la comparación.
* Este algoritmo fue propuesto por Harold H. Seward en 1954.
* Su ventaja es que al clasificar los enteros dentro de un cierto rango,
* Su complejidad es ο (n+k) (donde k es el rango de enteros),
* Más rápido que cualquier algoritmo de clasificación de comparación.
*
*/
function CountSort (arr, min, max) {
var i, z = 0, count = [];
para (i = min; i <= max; i ++) {
contar [i] = 0;
}
para (i = 0; i <arr.length; i ++) {
contar [arr [i]] ++;
}
para (i = min; i <= max; i ++) {
while (Count [i]-> 0) {
arr [z ++] = i;
}
}
regresar arr;
}
// prueba
var i, arr = [];
para (i = 0; i <100; i ++) {
arr.push (math.floor (math.random () * (141)));
}
CountSort (arr, 0, 140);