contenido
Clasificación de cubos
Ordenamiento de burbuja
1. Clasificación de cubos (versión simplificada)
La llamada clasificación de baldes significa que la secuencia de baldes está ordenada, simplemente coloque el número en la secuencia del balde correspondiente y registre cuántas veces aparece el número en el balde.
¡Contemos! 3 4 6 8 5 2 9 7 1
El número de cubos que necesitamos está compuesto por el número máximo + 1, por lo que ocupa una gran cantidad de memoria, pero la complejidad de tiempo es pequeña. Use una matriz para almacenar, arr[10] , el subíndice de la matriz comienza desde 0 . Primero inicialice los cubos a 0, lo que indica que no ha aparecido ningún número.
Primero hable sobre la inicialización de una matriz unidimensional
Esta es una inicialización
int arr[10] = { 0 };
De esta manera, aunque el primer elemento se inicializa, los siguientes elementos se establecen por defecto en 0
También se puede inicializar así: la siguiente declaración inicial no se inicializa y se realiza la asignación posterior.
int arr[10];
int n = 0;
for (n = 0; n < 10; n++)
{
arr[n] = 0;
}
En la inicialización habitual me gusta el primero.
Pasemos al número anterior 3 4 6 8 5 2 9 7 1
Y almacene el número en el cubo correspondiente, y registre cuántas veces aparece
for (n = 0; n < 9; n++)
{
scanf("%d", &s);
arr[s]++;
}
Entonces podemos generarlo ( de pequeño a grande )
for (n = 0; n < 10; n++)
{
if (arr[n] != 0)
printf("%d ", n);
}
código completo
#include <stdio.h>
#define MAX 10
int main()
{
int arr[MAX]={0};
int n = 0,s=0;
for (n = 0; n < MAX-1; n++)
{
scanf("%d", &s);
arr[s]++;
}
for (n = 0; n < MAX; n++)
{
if (arr[n] != 0)
printf("%d ", n);
}
return 0;
}
2. Bubble sort (idea básica para comparar el número anterior con el segundo número)
" Burbujear " es como la imagen de arriba, de abajo hacia arriba , el tipo de burbuja del que estamos hablando aquí es similar a este
Sigue siendo una secuencia tan desordenada 3 4 6 8 5 2 9 7 1, queremos que se convierta en 1 2 3 4 5 6 7 8 9
Supongamos que hay una flecha J que apunta a un número
1) Primero, J apunta al 3 inferior, que se compara con el número señalado por J+1 (es decir, el siguiente número), si es mayor que él, intercambiarán, de lo contrario, no intercambiarán. Luego J retrocede un paso (j++), y así sucesivamente. Compara hasta el último número. Esta vez se encuentra el número más grande.
for (j = 0; j < 9 - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
2) 3 4 6 5 2 8 7 1 9 , este es el arreglo en el paso anterior, se puede observar que se ha arreglado el último número (se puede entender que la burbuja más grande ha salido del agua), y el siguiente orden es para ordenar los números ya ordenados Retire los buenos números (el último número de cada fila) y ordene los siguientes números de acuerdo con (1) hasta que se complete la clasificación.
Aviso:
1. La clasificación total es ahora el número de números ordenados menos 1
2. Disminuir en 1 por cada clasificación
código completo
int main()
{
int arr[9] = { 3 ,4, 6, 8, 5, 2, 9 ,7, 1 };
int i, j;
for (i = 0; i < 9 - 1; i++)
{
for (j = 0; j < 9 - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return 0;
}
Los amigos interesados pueden optimizar el algoritmo de clasificación de burbujas anterior.
El siguiente es un grupo que hace preguntas de programación. Aquellos que tengan preguntas pueden unirse al grupo. ¡No hay anuncios! ! !
Si hay algún problema con mi artículo, puede comentar en el área de comentarios a continuación, ¡gracias!