Cómic: ¿Qué es la clasificación de cócteles?

Cómic: ¿Qué es la clasificación de cócteles?

Haga clic en "Programador Xiaohui" arriba y elija seguir la cuenta oficial para obtener
artículos interesantes y significativos que se entregarán lo antes posible.

En el último cómic, Xiao Hui introdujo la idea de clasificación burbujeante y varios cambios:

Comic: ¿Qué es el tipo de burbuja?

Entonces, ¿qué son los cócteles sagrados? Hablaremos en detalle en este número.
Cómic: ¿Qué es la clasificación de cócteles?

Cómic: ¿Qué es la clasificación de cócteles?

Repasemos primero la idea de
la clasificación de burbujas: cada elemento de clasificación de burbujas puede ser como una pequeña burbuja, moviéndose poco a poco hacia un lado de la matriz de acuerdo con su propio tamaño. En cada ronda del algoritmo, los elementos se comparan de izquierda a derecha y se realiza un intercambio de posición unidireccional.

Entonces, ¿qué optimización se ha realizado para la clasificación de cócteles?

El proceso de comparación e intercambio de elementos de la clasificación de cócteles es bidireccional.

Tomemos una castaña:
Cómic: ¿Qué es la clasificación de cócteles?

Hay 8 números para formar una secuencia desordenada: 2, 3, 4, 5, 6, 7, 8, 1, y espero ordenar de menor a mayor.

Si sigue la idea de la clasificación burbujeante, ¿cuál es el proceso de clasificación?

Resultados de la primera ronda (8 y 1 intercambio)
Cómic: ¿Qué es la clasificación de cócteles?

Resultados de la segunda ronda (7 y 1 intercambio)
Cómic: ¿Qué es la clasificación de cócteles?

Resultados de la tercera ronda (6 y 1 intercambio)
Cómic: ¿Qué es la clasificación de cócteles?

Resultados de la cuarta ronda (5 y 1 intercambio)
Cómic: ¿Qué es la clasificación de cócteles?

Resultados de la quinta ronda (4 y 1 intercambio)
Cómic: ¿Qué es la clasificación de cócteles?

Resultados de la sexta ronda (3 y 1 intercambio)
Cómic: ¿Qué es la clasificación de cócteles?

Resultados de la séptima ronda (intercambio 2 y 1)
Cómic: ¿Qué es la clasificación de cócteles?
Cómic: ¿Qué es la clasificación de cócteles?
Cómic: ¿Qué es la clasificación de cócteles?

¿Cómo es el tipo de cóctel? Echemos un vistazo al proceso detallado:

La primera ronda (igual que la clasificación de burbujas, intercambio de 8 y 1)
Cómic: ¿Qué es la clasificación de cócteles?

Segunda ronda

En este punto, es diferente. Comparamos e intercambiamos de derecha a izquierda:

8 ya está en el área ordenada, ignoramos 8 y comparamos 1 con 7. El elemento 1 es menor que 7, por lo que 1 y 7 intercambian posiciones:
Cómic: ¿Qué es la clasificación de cócteles?

Cómic: ¿Qué es la clasificación de cócteles?

A continuación, se comparan 1 y 6, el elemento 1 es menor que 6, por lo que 1 y 6 intercambian posiciones:
Cómic: ¿Qué es la clasificación de cócteles?
Cómic: ¿Qué es la clasificación de cócteles?

La siguiente comparación entre 1 y 5, el elemento 1 es menor que 5, por lo que 1 y 5 intercambian posiciones:
Cómic: ¿Qué es la clasificación de cócteles?

Cómic: ¿Qué es la clasificación de cócteles?

El siguiente intercambio de 1 y 4, intercambio de 1 y 3 y intercambio de 1 y 2 finalmente se convirtió en el siguiente resultado:
Cómic: ¿Qué es la clasificación de cócteles?

La tercera ronda (aunque ya está en orden, pero el proceso no ha terminado)

En la tercera ronda de clasificación de cócteles, debe comparar e intercambiar de izquierda a derecha nuevamente:

Comparando 1 y 2, la posición no cambia; comparando 2 y 3, la posición es la misma; comparando 3 y 4, la posición es la misma ... Comparando 6 y 7, la posición es la misma.

No hay intercambio de posiciones de elementos, la prueba ya está en orden y finaliza la clasificación.

Esta es la idea de clasificar cócteles. El proceso de clasificación es como un péndulo. La primera vuelta va de izquierda a derecha, la segunda vuelta va de derecha a izquierda y la tercera vuelta va de izquierda a derecha ...
Cómic: ¿Qué es la clasificación de cócteles?
Cómic: ¿Qué es la clasificación de cócteles?

public class CockTailSort {

private static void sort(int array[])
{
    int tmp  = 0;

   for(int i=0; i<array.length/2-1; i++)
   {
       //有序标记,每一轮的初始是true
       boolean isSorted = true;
       //奇数轮,从左向右比较和交换
       for(int j=i; j<array.length-i  ; j++)
       {
           if(array[j] > array[j+1]
           {
               tmp = array[j];
               array[j] = array[j+1];
               array[j+1] = tmp;
               //有元素交换,所以不是有序,标记变为false
               isSorted = false;
           }
       }
       if(isSorted){
           break;
       //偶数轮,从右向左比较和交换
       for(int j=array.length-i-1; j>i; j--)
       {
           if(array[j] < array[j-1])
               tmp = array[j];
               array[j] = array[j-1]
               array[j-1] = tmp;
               //有元素交换,所以不是有序,标记变为false
               isSorted = false;
       }
       if(isSorted){
           break;
       }
   }
}
public static void main(String[] args){
   int[] array = new int[]{2,3,4,5,6,7,8,1};
   sort(array);
   System.out.println(Arrays.toString(array));
}

}
Este código es la implementación original de la clasificación de cócteles. El bucle grande fuera del código controla todas las rondas de clasificación. El bucle grande contiene dos bucles pequeños. El primer bucle compara e intercambia elementos de izquierda a derecha, y el segundo bucle compara e intercambia elementos de derecha a izquierda.
Cómic: ¿Qué es la clasificación de cócteles?

Cómic: ¿Qué es la clasificación de cócteles?

Revisemos las ideas de optimización de la clasificación de falsificaciones para áreas ordenadas:

En la clasificación de burbujas original, la longitud de la región ordenada es igual al número de rondas de clasificación. Por ejemplo, la longitud del área ordenada después de la primera ronda de clasificación es 1 y la longitud del área ordenada después de la segunda ronda de clasificación es 2 ...

Para optimizar, podemos registrar la posición del último intercambio de elementos al final de cada ronda de clasificación, esa posición es el límite de la secuencia desordenada y luego el área ordenada.

Para la clasificación de burbujas unidireccional, debemos establecer un valor de límite, y para la clasificación de cóctel bidireccional, debemos establecer dos valores de límite. Consulte el código:

public class CockTailSort {

private static void sort(int array[])
{
   int tmp  = 0;

   //记录右侧最后一次交换的位置
   int lastRightExchangeIndex = 0;
   //记录左侧最后一次交换的位置
   int lastLeftExchangeIndex = 0
   //无序数列的右边界,每次比较只需要比到这里为止
   int righttBorder = array.length - 1;
   //无序数列的左边界,每次比较只需要比到这里为止
   int leftSortBorder = 0;
   for(int i=0; i<array.length/2  ; i++)
       //有序标记,每一轮的初始是true
       boolean isSorted = true;
       //数轮,从左向右比较和交换
       for(int j=leftSortBorder; j<rightSortBorder; j++)
       {
           if(array[j] > array[j+1])
           {
               tmp = array[j];
               array[j] = array[j+1];
               array[j+1] = tmp;
               //有元素交换,所以不是有序,标记变为false
               isSorted = false;
               lastRightExchangeIndex = j;
           }
       }
       rightSortBorder = lastRightExchangeIndex;
       if(isSorted){
           break
       }
       //偶数轮,从右向左比较和交换
       for(int j=rightSortBorder; j>leftSortBorder; j--)
       {
           if(array[j] < array[j-1])
           {
               tmp = array[j];
               array[j] = array[j-1];
               array[j-1] = tmp;
               //有元素交换,所以不是有序,标记变为false
               isSorted = false;
               lastLeftExchangeIndex = j;
           }

}

El código usa los valores de límite izquierdo y derecho, rightSortBorder representa el límite derecho e leftSortBorder representa el límite izquierdo.

Al comparar e intercambiar elementos, los redondeos impares se desplazan desde la posición leftSortBorder a rightSortBorder, y los redondeos pares se desplazan desde la posición rightSortBorder a leftSortBorder.
Cómic: ¿Qué es la clasificación de cócteles?
Cómic: ¿Qué es la clasificación de cócteles?
Cómic: ¿Qué es la clasificación de cócteles?
Cómic: ¿Qué es la clasificación de cócteles?

-----FIN-----

Amigos a los que les gusta este artículo, mantengan presionada la imagen para seguir al programador de cuentas de suscripción Xiaohui y ver más contenido emocionante.
Cómic: ¿Qué es la clasificación de cócteles?

Supongo que te gusta

Origin blog.51cto.com/14982143/2550596
Recomendado
Clasificación