Algoritmo de clasificación de burbujas, algoritmo de clasificación de burbujas en lenguaje C en detalle

La clasificación de burbujas es el método de clasificación más simple y fácil de entender. Aunque tiene muchos pasos de cálculo y no es el más rápido, es el más básico y debe ser dominado por principiantes.

El principio de la clasificación de burbujas es: de izquierda a derecha, se comparan elementos adyacentes. Cada vez que compare una ronda, encontrará la más grande o la más pequeña de la secuencia. Este número aparecerá desde el extremo derecho de la secuencia.

Tomando la clasificación de pequeño a grande como ejemplo, después de la primera ronda de comparación, el número más grande entre todos los números flotará hacia el extremo derecho; después de la segunda ronda de comparación, el segundo número más grande entre todos los números flotará al penúltimo Posiciones ... simplemente compárelas ronda por ronda, y finalmente ordene de pequeño a grande.

Por ejemplo, clasifique la siguiente secuencia de pequeña a grande: 90 21 132 -58 34

La primera ronda:
1) relación 90 y 21, 90> 21, luego intercambian posiciones: 21 90 132 -58 34

2) La relación de 90 a 132, 90 <132, no hay necesidad de intercambiar posiciones.
3) La relación de 132 y –58, 132> –58, luego intercambian posiciones: 21 90-58 132 34

4) La relación de 132 a 34, 132> 34, luego intercambian posiciones: 21 90 -58 34 132

En este punto, la primera ronda está relativamente completa. El resultado de la primera ronda es encontrar el número más grande en la secuencia y flotar hacia el extremo derecho.

Al comparar, la enésima comparación en cada ronda es una comparación entre el enésimo elemento y el n + 1º elemento en la nueva secuencia (si n comienza en 1).

La segunda ronda:
1) relación 21 a 90, 21 <90, no hay necesidad de intercambiar posiciones.
2) La razón de 90 y –58, 90> –58, luego intercambian posiciones: 21-58 90 34 132

3) La relación de 90 a 34, 90> 34, luego intercambian posiciones: 21-58 34 90 132

Esta es la segunda ronda. El resultado de la segunda ronda fue encontrar el segundo número más grande en la secuencia y flotar a la segunda posición en el extremo derecho.

Tercera ronda:
1) relación 21 y –58, 21> –58, luego intercambian posiciones: -58 21 34 90 132

2) relación 21 a 34, 21 <34, no hay necesidad de intercambiar posiciones.

Esta es la tercera ronda. El resultado de la tercera ronda es encontrar el tercer número más grande en la secuencia y flotar a la tercera posición en el extremo derecho.

Ronda 4:
1) –58 a 21, –58 <21, no es necesario intercambiar posiciones.

En este punto, se ordena toda la secuencia. La secuencia de pequeño a grande es "–58 21 34 90 132". También se puede concluir a partir de este ejemplo que si hay n datos, entonces solo se necesitan comparar n – 1 rondas. Además de la primera ronda, cada ronda no necesita comparar todas. Porque después de la comparación de la ronda anterior, la ronda que se ha comparado ha encontrado el número más grande en la ronda y ha flotado hacia la derecha, por lo que no es necesario comparar el número de la derecha para saber que es grande.

Escriba un programa a continuación:

# include <stdio.h>
int main(void)
{
    int a[] = {900, 2, 3, -58, 34, 76, 32, 43, 56, -70, 35, -234, 532, 543, 2500};
    int n;  //存放数组a中元素的个数
    int i;  //比较的轮数
    int j;  //每轮比较的次数
    int buf;  //交换数据时用于存放中间数据
    n = sizeof(a) / sizeof(a[0]);  /*a[0]是int型, 占4字节, 所以总的字节数除以4等于元素的个数*/
    for (i=0; i<n-1; ++i)  //比较n-1轮
    {
        for (j=0; j<n-1-i; ++j)  //每轮比较n-1-i次,
        {
            if (a[j] < a[j+1])
            {
                buf = a[j];
                a[j] = a[j+1];
                a[j+1] = buf;
            }
        }
    }
    for (i=0; i<n; ++i)
    {
        printf("%d\x20", a[i]);
    }
    printf("\n");
    return 0;
}

La salida es:
2500 900 543 532 76 56 43 35 34 32 3 2 -58 -70 -234

programa, ¿por qué el número de comparaciones por ronda es j <n – 1 – i en lugar de j <n – 1?

Debido a que existe una característica de la clasificación de burbujas, este programa se ordena de mayor a menor, por lo que después de la primera ronda de clasificación, el número más pequeño flotará hacia el extremo derecho; después de la segunda ronda de clasificación, el segundo número más pequeño flotará hacia abajo Dos posiciones; después de la tercera ronda de clasificación, el tercer número más pequeño flotará a la penúltima posición ... Es decir, tantas rondas como clases, ya que muchos números se han ordenado de acuerdo con los requisitos de clasificación, no es necesario que sean Comparar Está bien escribir j <n – 1, pero el programa hace mucho trabajo inútil cuando se ejecuta.

 

42 artículos originales publicados · Me gusta 10 · Visitantes más de 10,000

Supongo que te gusta

Origin blog.csdn.net/qq_37659294/article/details/102760464
Recomendado
Clasificación