Ordenación por cubos (versión simplificada) y ordenación por burbujas

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 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!

Supongo que te gusta

Origin blog.csdn.net/m0_60598323/article/details/122648381
Recomendado
Clasificación