1. Introducción a la clasificación de cubetas
El principio de la clasificación por cubos es muy simple: divide los números en un número limitado de cubos.
Suponga que hay N números enteros en la matriz a para ordenar, y el rango de los datos en la matriz a se conoce [0, MAX). Al ordenar los depósitos, cree una matriz de depósitos r con una capacidad de MAX e inicialice todos los elementos de la matriz de depósitos a 0; trate cada unidad en la matriz de depósitos con una capacidad de MAX como un "depósito".
Al ordenar, recorra la matriz uno por uno y use el valor de la matriz a como subíndice de la "matriz de cubos r". Cuando se leen los datos en a, el valor del depósito se incrementa en 1. Por ejemplo, si se lee la matriz a [3] = 5, el valor de r [5] es +1.
Descripción gráfica de clasificación de dos cubos
Código de clasificación del depósito
/*
* 桶排序
*
* 参数说明:
* a -- 待排序数组
* n -- 数组a的长度
* max -- 数组a中最大值的范围
*/
void bucketSort(int a[], int n, int max)
{
int i,j;
int buckets[max];
// 将buckets中的所有数据都初始化为0。
memset(buckets, 0, max*sizeof(int));
// 1. 计数
for(i = 0; i < n; i++)
buckets[a[i]]++;
// 2. 排序
for (i = 0, j = 0; i < max; i++)
{
while( (buckets[i]--) >0 )
a[j++] = i;
}
}
bucketSort (a, n, max) se utiliza para ordenar la matriz a por cubos, n es la longitud de la matriz a y max es el rango [0, max) al que pertenece el elemento más grande de la matriz.
Suponga que a = {8,2,3,4,3,6,6,3,9}, max = 10. En este momento, coloque todos los datos de la matriz a en el depósito que debe ser 0-9. Como se muestra abajo:
Después de colocar los datos en el depósito, a través de un algoritmo determinado, los datos del depósito se extraen y se convierten en una matriz ordenada. Obtenemos el resultado que queremos.
El editor recomienda mi propio grupo de intercambio de tecnología de lenguaje linuxC / C ++: [ 1106675687 ] He recopilado algunos libros de aprendizaje y materiales de video que creo que es mejor compartir en los archivos del grupo, ¡y puede agregarlos si los necesita!
Tres, implementación de clasificación de cubos
Código de implementación de implementación de tipo C de depósito (bucket_sort.c)
View Code
Código de implementación de C ++ de clasificación de depósitos (BucketSort.cpp)
View Code
Código de implementación de implementación de Java de clasificación de depósitos (BucketSort.java)
View Code
Los principios y los resultados de las tres implementaciones anteriores son los mismos. Aquí está su salida:
before sort:8 2 3 4 3 6 6 3 9
after sort:2 3 3 3 4 6 6 8 9