Estructura de datos: algoritmo de clasificación común (1): clasificación de burbujas (implementación de C ++)

Clasificación común de clasificación de burbujas

1. Idea básica:

En un conjunto de números para ordenar, compare y ajuste los dos números adyacentes de arriba hacia abajo para todos los números en el rango que no está actualmente ordenado, de modo que el número mayor se hunda, Los pequeños van subiendo.

2. Descripción del algoritmo:

① Cuando se comparan dos números adyacentes y se descubre que su orden es contrario al requisito de orden, se intercambian. Compare dos números adyacentes a su vez, colocando el número decimal al frente y el número grande al final.

②Primero compare el primer y segundo número, coloque el número decimal antes y coloque el número grande después; luego compare el segundo número y el tercer número, coloque el número decimal antes y después del número grande y continúe así hasta el final de la comparación Para dos números, coloque el número decimal antes del número grande.

③Repita la primera ronda de pasos hasta completar toda la clasificación

3. Ejemplos:

Ejemplo 1:

(1) Para ordenar la matriz: [10,1,35,61,89,36,55]

Inserte la descripción de la imagen aquí

(2) La primera secuencia de tiempo:

La primera clasificación: 10 y 1, 10 es mayor que 1, posiciones de intercambio [1,10,35,61,89,36,55]

La segunda ronda de clasificación: compare 10 y 35, 10 es menos que 35, no intercambie posiciones [1,10,35,61,89,36,55]

La tercera ronda de clasificación: compare 35 y 61, 35 es menor que 61, no intercambie posiciones [1,10,35,61,89,36,55]

La cuarta ronda de clasificación: compare 61 y 89, 61 es menor que 89, no intercambie posiciones [1,10,35,61,89,36,55]

Clasificación de quinto paso: comparar 89 y 36, 89 es mayor que 36, intercambiar posiciones [1,10,35,61,36,89,55]

La sexta secuencia de tiempo: comparar 89 y 55, 89 es mayor que 55, intercambiar posiciones [1,10,35,61,36,55,89]

Se hicieron un total de seis comparaciones en el primer viaje y los resultados ordenados: [1,10,35,61,36,55,89]

img

(3) La segunda secuencia de tiempo:

El primer tipo: se comparan 1 y 10, 1 es menor que 10 y las posiciones 1,10,35,61,36,55,89 no se intercambian

El segundo tipo: comparación de 10 y 35, 10 es menor que 35, no intercambie posiciones 1,10,35,61,36,55,89

El tercer orden: comparación 35 y 61, 35 es menor que 61, no intercambie posiciones 1,10,35,61,36,55,89

Cuarto orden: compare 61 y 36, 61 es mayor que 36, intercambie posiciones 1,10,35,36,61,55,89

Quinto orden: compare 61 y 55, 61 es mayor que 55, intercambie posiciones 1,10,35,36,55,61,89

Se hicieron un total de 5 comparaciones en la segunda pasada y los resultados ordenados: 1,10,35,36,55,61,89

(4) La tercera secuencia de tiempo:

1 y 10 se comparan, 1 es menor que 10 y las posiciones no se intercambian 1,10,35,36,55,61,89

El segundo orden: comparación de 10 y 35, 10 es menor que 35, no intercambie posiciones 1,10,35,36,55,61,89

El tercer orden: comparación 35 y 36, 35 es menor que 36, no intercambie posiciones 1,10,35,36,55,61,89

El cuarto orden: compare 36 y 61, 36 es menor que 61, no intercambie posiciones 1,10,35,36,55,61,89

En la tercera ronda, se hicieron un total de 4 comparaciones, y los resultados de la clasificación: 1,10,35,36,55,61,89

Hasta ahora, la posición ya está en orden.

Implementación de código C ++:

#include<iostream>
using namespace std;
 
void print(int arr[], int n)
{  
    for(int j= 0; j<n; j++)
	{  
           cout<<arr[j] <<"  ";  
        }  
    cout<<endl;  
}  
 
void BubbleSort(int arr[], int n)
{
    for (int i = 0; i < n - 1; i++)
	{
            for (int j = 0; j < n - i - 1; j++)
	        {
                    if (arr[j] > arr[j + 1]) 
			{
                            int temp = arr[j];
                            arr[j] = arr[j + 1];
                            arr[j + 1] = temp;
                        }
                 }
         }
}
 
int main()
{  
    int s[7] = {10,1,35,61,89,36,55};  
    cout<<"初始序列:";  
    print(s,7);  
    BubbleSort(s,7);  
    cout<<"排序结果:";  
    print(s,7);  
    system("pause"); 
} 

Ejemplo 2:

Ordenar matriz: [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]

Dado que el primer ejemplo ya ha explicado el proceso, la clasificación del segundo ejemplo se muestra en el siguiente diagrama dinámico:

img

4. Análisis de algoritmos:

(1) Se puede ver que: N números necesitan ser ordenados, se ordenan un total de N-1 pasadas, y la cantidad de clasificaciones para cada i pasada es (Ni) veces, por lo que se pueden usar declaraciones de doble bucle, la capa externa controla cuántas veces es el bucle, la capa interna Controla el número de ciclos por pasada

(2) La ventaja de la clasificación de burbujas: cada vez que se realiza la clasificación, habrá menos comparación, porque cada vez que se realiza la clasificación, se encontrará un valor mayor. Como en el ejemplo anterior: después de la primera comparación, el último número debe ser el número más grande. En la segunda clasificación, solo necesita comparar otros números excepto el último número, y también puede encontrar el número más grande. El número de se clasifica detrás del número que participa en la segunda ronda de comparación. En la tercera ronda de comparación, solo necesita comparar los otros números excepto los dos últimos números, y así sucesivamente ... Es decir, no hay comparación, cada vez Comparar menos una vez por viaje reduce la cantidad de algoritmos hasta cierto punto.

(3) Complejidad del tiempo

1. Si nuestros datos están en orden positivo, solo necesitamos hacer un viaje para completar la clasificación. Los tiempos de comparación requeridos C y los tiempos de movimiento registrados M alcanzan el valor mínimo, a saber: Cmin = n-1; Mmin = 0; Por lo tanto, la mejor complejidad de tiempo para la clasificación de burbujas es O (n).

2. Si, lamentablemente, nuestros datos están en orden inverso, debemos ordenarlos n-1 veces. Cada clasificación requiere ni comparaciones (1≤i≤n-1), y cada comparación debe mover el registro tres veces para alcanzar la posición de registro de intercambio. En este caso, el número de comparaciones y movimientos alcanza el máximo:

img

En resumen: la complejidad de tiempo promedio total de la clasificación de burbujas es: O (n 2), la complejidad de tiempo no tiene nada que ver con el estado de los datos. En resumen: la complejidad de tiempo promedio total de la clasificación de burbujas es: O (n ^ 2), y la complejidad de tiempo no tiene nada que ver con el estado de los datos.Totalmente en el dijo : toma burbuja de descarga secuencia del total de la plana media de tiempo entre re- heteroarilo grado es : O ( n-2 ),Cuando entre hetero grado complejo y el número de condiciones similares a los datos sin autorización .

5. Resumen:

  • En el peor de los casos: la clasificación burbujeante requiere n-1 rondas de ciclos de clasificación. En cada ronda de ciclos de clasificación, la secuencia no está en orden positivo, por lo que se requieren ni comparaciones (1 <= i <= n-1) en cada ronda del ciclo de clasificación. , Es decir, el ciclo externo se ejecuta n-1 veces, el ciclo interno se ejecuta n veces como máximo y el ciclo interno se ejecuta al menos una vez. Dado que los tiempos de ejecución del ciclo interno son lineales, el ciclo interno se ejecuta en promedio (n + 1) / 2 veces, y la complejidad del tiempo se calcula Para ((n-1) (n + 1)) / 2 = (- 1) / 2, la complejidad del tiempo es O (n2)

  • Mejor caso: la matriz que se va a clasificar está en orden positivo y la clasificación se puede completar en una ronda de escaneo. En este momento, la complejidad del tiempo es solo la complejidad del tiempo de la comparación, que es O (n)

  • Complejidad de tiempo promedio: O (n 2) Complejidad de tiempo promedio: O (n ^ 2) Cuando inter complejo hetero grado nivel promedio de casos condiciones : O ( n-2 )

  • La complejidad espacial es el espacio de memoria ocupado por la variable temporal cuando se intercambian elementos. La complejidad espacial óptima es que el orden de los elementos iniciales ya está arreglado, luego la complejidad espacial es 0 y la peor complejidad espacial es la clasificación del orden inverso del elemento inicial. , La complejidad espacial es O (n) y la complejidad espacial promedio es O (1)

Supongo que te gusta

Origin blog.csdn.net/qq_43801020/article/details/107937787
Recomendado
Clasificación