Arquitectura de datos y algoritmo: algoritmo de clasificación de cubos gráficos e implementación de código C / C ++ [Colección recomendada]

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:

Inserte la descripción de la imagen aquí
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!
Inserte la descripción de la imagen aquí

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 

Supongo que te gusta

Origin blog.csdn.net/m0_50662680/article/details/113055922
Recomendado
Clasificación