Comprensión de doble bucle de clasificación de burbujas

Hablar principalmente sobre la comprensión personal de algunos puntos clave de la clasificación de burbujas, como las ideas de algoritmos, el significado de los dos bucles y la determinación del rango de las variables del bucle intermedio.

原理:比较两个相邻的元素,将值大的元素交换至右端。

思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。
第一趟比较完成后,最后一个数一定是数组中最大的一个数,所以第二趟比较的时候最后一个数不参与比较;

第二趟比较完成后,倒数第二个数也一定是数组中第二大的数,所以第三趟比较的时候最后两个数不参与比较;

依次类推,每一趟比较次数-1;
……

Por ejemplo : para ordenar la matriz: int [] arr = {6,3,8,2,9,1};

Clasificación de primer paso:

El primer orden: se comparan 6 y 3, 6 es mayor que 3, posiciones de intercambio: 3 6 8 2 9 1

El segundo orden: 6 y 8, 6 es menor que 8, sin intercambiar posiciones: 3 6 8 2 9 1

El tercer tipo: 8 y 2, 8 es mayor que 2, posiciones de intercambio: 3 6 2 8 9 1

El cuarto orden: 8 y 9, 8 es menor que 9, sin intercambiar posiciones: 3 6 2 8 9 1

Quinto orden: comparación de 9 y 1: 9 es mayor que 1, posición de intercambio: 3 6 2 8 1 9

Se hicieron un total de 5 comparaciones en el primer viaje y los resultados ordenados: 3 6 2 8 1 9


Clasificación por segunda vez:

La primera clasificación: 3 y 6, 3 es menor que 6, sin intercambiar posiciones: 3 6 2 8 1 9

Segundo orden: 6 y 2, 6 es mayor que 2, posiciones de intercambio: 3 2 6 8 1 9

La tercera clasificación: 6 y 8, 6 es mayor que 8, sin intercambiar posiciones: 3 2 6 8 1 9

Cuarto orden: compare 8 con 1, 8 es mayor que 1, intercambie posiciones: 3 2 6 1 8 9

En la segunda ronda, se hicieron un total de 4 comparaciones y los resultados ordenados: 3 2 6 1 8 9


La tercera secuencia de tiempo:

El primer tipo: 3 y 2, 3 es mayor que 2, posiciones de intercambio: 2 3 6 1 8 9

El segundo orden: 3 y 6, 3 es menor que 6, sin intercambiar posiciones: 2 3 6 1 8 9

La tercera clasificación: 6 y 1, 6 es mayor que 1, posiciones de intercambio: 2 3 1 6 8 9

En el segundo viaje, se hicieron un total de 3 comparaciones y los resultados ordenados: 2 3 1 6 8 9


Tipo de cuarto pase:

La primera clasificación: se comparan 2 y 3, 2 es menor que 3 y las posiciones no se intercambian: 2 3 1 6 8 9

El segundo orden: 3 y 1, 3 es mayor que 1, posiciones de intercambio: 2 1 3 6 8 9

En el segundo viaje, se hicieron un total de 2 comparaciones y los resultados ordenados: 2 1 3 6 8 9


Clasificación de quinto paso:

El primer tipo: 2 se compara con 1, 2 es mayor que 1, posiciones de intercambio: 1 2 3 6 8 9

En la segunda pasada, se realizó un total de 1 comparación y los resultados ordenados: 1 2 3 6 8 9


Resultado final: 1 2 3 6 8 9


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

para (i = 0; i <n-1; i ++)

for (j = 0; j <ni-1; j ++) // n es la longitud de la matriz, es decir, el número de elementos

El papel del bucle exterior es:

Extraiga el número más grande de la matriz actualmente sin clasificar y colóquelo a la izquierda de los datos ordenados. Es decir, nuestro primer ciclo externo es cambiar la posición del número más grande al extremo derecho de la matriz, el segundo ciclo externo es intercambiar el siguiente número más grande a la segunda derecha de la matriz, y así sucesivamente.

El papel del bucle interno es:

Darnos cuenta del proceso de hundir grandes cantidades que queremos. Cada vez que comparamos dos datos adyacentes, la longitud de una matriz es n. Solo necesitamos hacer n-1 comparaciones adyacentes para lograr el hundimiento de números grandes, mientras que los números grandes que se han depositado en el ciclo anterior no son necesarios. para ordenar de nuevo.

Es evidente que hay que ordenar N números y se ordena un total de N-1 veces.

¿Por qué la condición de juicio del bucle externo es i <n-1?

Es necesario ordenar un total de n números n-1 veces, y el bucle exterior i de 0 a n-1 es exactamente n-1 veces.

¿Por qué la condición de juicio del bucle interno es j <ni-1?

Esto comienza con el principio de clasificación de burbujas: cada vez que la clasificación de burbujas se clasifica en un bucle, el número más grande se clasifica en el extremo derecho (clasificación ascendente predeterminada) y cada clasificación se clasifica en función de la clasificación anterior (por ejemplo, ) Después de la segunda clasificación, i se ha convertido en 2, y la tercera clasificación se basa en la segunda vez, y después de la segunda clasificación, los dos números más grandes se han puesto al final. En el tercer orden, no No es necesario compararlos, tienes que restar el "2", solo necesitas repetir ni veces (en este caso, i es 2), ¿por qué -1 es incluso después de -i? Esto se debe a que el valor actual se compara con el siguiente valor a juicio del bucle interno. Si no se reduce en 1, cuando el bucle alcanza el último valor, el siguiente valor no se puede recuperar y se requieren operaciones adicionales, o se lanza una excepción de que el subíndice de la matriz está fuera de los límites.

De hecho, la determinación del rango de j <ni-1 en la capa interna es confusa, hay dos formas principales de entenderlo.

1 es la explicación estándar anterior para evitar que el subíndice de la matriz cruce el límite. Por ejemplo, n [] = {5, 22, 7, 42, 23}, el número es n = 5, i ahora es 2, ni = 3 , i es 2, y luego las primeras Tres veces, se han determinado los dos números, solo se deben comparar los primeros tres números, y esto solo se debe comparar dos veces, es decir, ni (para 2) -1 = 2 . Si no se reduce en uno, aquí hay ni (para 2) = 3 a tres veces, lo que obviamente es incorrecto. Es normal que:

if n(0)>n(1)
if n(1)>(2)  这是正确的

Cuando no es correcto, 5-2 = 3 j pasa de 0 a 3 más de 3 veces:

if n(0)>n(1)
if n(1)>(2) 
if n(2)>(3) 这就比错了  这都把 确定好的倒数第二大的数再给比较,这就是错了。就成乐下表越界了。

2 En cada comparación, hay n-1 veces, y cada vez se resta del número total de comparaciones esta vez, más el número del número determinado i se resta, es decir ji-1. De hecho, este es también el número de ni, n que se resta de i. La cantidad de números restantes que se van a ordenar y luego restar uno de su número es la cantidad de veces que se deben comparar los números restantes. La matriz comienza del subíndice 0. No importa. El subíndice comienza desde 0 o 1, lo que afecta la comparación de bucles internos. Si es 0, se cita directamente. Si es 1, es n [i-1]. En cuanto al argumento que comienza desde 0, básicamente quiere evitar que el subíndice cruce el límite.

En cuanto a la optimización del algoritmo, no la consideraré por el momento. Aquí solo se explican brevemente algunos puntos clave del algoritmo.
Experiencia de aprendizaje personal, si hay algún error, corrígeme.

Adjunto algunos artículos que hablan sobre burbujear mejor:
https://blog.csdn.net/kelinfeng16/article/details/84034386
https://www.cnblogs.com/shen-hua/p/5422676.html

Supongo que te gusta

Origin blog.csdn.net/publicstaticfinal/article/details/90155040
Recomendado
Clasificación