Algoritmo desde la entrada hasta la serie maestra: ordenación por inserción

I. Resumen

Dijimos en la sección anterior que la ordenación es parte del algoritmo. Así que aprendemos que ordenar es también una introducción al algoritmo. Para que todos sientan que ordenar es parte del algoritmo, daré un ejemplo para demostrarlo: por ejemplo, en un juego de mahjong, las cartas del oponente deben clasificarse después de repartir las cartas. Piénselo, clasificación de mahjong ¿Cómo arreglarlo? Cuales son sus caracteristicas? Y en el proceso de sacar cartas y jugar a las cartas, tenemos que clasificarlas constantemente. ¿Qué algoritmo de clasificación es el más rápido de elegir?

En la situación anterior, podemos analizar qué algoritmo de clasificación es más eficiente. Por ejemplo, la siguiente imagen ya tiene un juego de cartas en un orden fijo:

En este momento es nuestro turno de robar las cartas, las cartas que robamos son las siguientes:

En este momento, para poner estos "tres iguales" en el mazo superior de cartas, existen las siguientes reglas:

1. Normal "3 iguales" debe colocarse entre "2 iguales" y "4 iguales".

2. No tiene nada que ver con cartas de otros palos, ni siquiera con "5 con". Simplemente ponga "3 con" en medio de "2 con" y "4 con". No importa dónde estén "2 con" y "4 con".

Aprendimos sobre la clasificación por selección. ¿Es apropiado utilizar la clasificación por selección para clasificar las tarjetas de arriba? Evidentemente no es apropiado, porque el orden de selección debe ser comparado desde "70.000", se selecciona la carta más pequeña para intercambiar posiciones con la primera carta, etc. Pero aquí, el "3 de lo mismo" de las fichas de mahjong no tiene nada que ver con "70.000", y no es necesario afectar a "70.000". Por lo tanto, no es apropiado usar el ordenamiento selectivo debido al alto grado de responsabilidad de tiempo; es mejor usar el ordenamiento por inserción aquí, ¿qué es el ordenamiento por inserción? Eso es lo que debe introducirse en esta sección.

Dos, ordenación por inserción

La ordenación por inserción es una especie de ordenación simple. La ordenación simple generalmente se denomina simplemente porque su algoritmo es más fácil de entender y no significa que su uso sea simple. Para que todos dominen el ordenamiento por inserción, primero analizamos el principio del ordenamiento por inserción.

2.1, el principio de ordenación por inserción

Primero, hay una matriz que se ordenará de la siguiente manera:

Solo hay un número 0 en la matriz anterior que debe organizarse, y los demás números están en el orden correcto. Este tipo de matriz es más eficiente para usar la ordenación por inserción. A continuación se describe el proceso de usar la ordenación por inserción para esta matriz.

1. Primero compare 1 y 2, si 2 es menor que 1, intercambie posiciones. De lo contrario, las posiciones no se intercambian. Esta matriz no necesita intercambiar posiciones.

2. Vuelva a comparar 2 y 3. Si 3 es menor que 2, intercambie posiciones. Pero el 3 real es mayor que 2, por lo que la posición no se cambia y permanece sin cambios.

3. De la misma manera, no es necesario cambiar de posición al comparar 3 y 4, que permanece sin cambios

4. Luego, compare 4 y 0, 0 es menor que 4, así que intercambie posiciones

La matriz después de intercambiar posiciones es la siguiente:

5. Debido a que el vecino de 3 ha cambiado, 3 y 0 se comparan nuevamente, 0 es menor que 3 y las posiciones se intercambian. La matriz después del intercambio es la siguiente:

6. Por analogía, la matriz después de intercambiar las posiciones de 0 y 2 es la siguiente:

La matriz de posiciones de intercambio 0 y 1 es la siguiente:

El orden de dicha matriz es correcto, pero el ciclo aún no se ha completado, porque acabamos de desplazarnos a la posición del número 4 y el número 5 no se ha comparado.

7. Finalmente compare 4 y 5. Si 5 es menor que 4, intercambie posiciones, pero 5 es mayor que 4, por lo que la posición permanece sin cambios. Después de que la matriz se repita, la clasificación final es la siguiente:

Lo anterior es el principio de ordenación por inserción.

2.2, la diferencia entre el ordenamiento por inserción y el ordenamiento por selección

Por ejemplo, en el ejemplo anterior, la ordenación por inserción es mover 0 del índice 4 al índice 3, 2, 1, 0 y finalmente contar como el final. El orden de selección es encontrar el valor más pequeño 0 e intercambiar directamente con 1, la posición de 0 a 1 y la posición de 1 a 0. Puede leer la introducción anterior sobre la clasificación por selección.

En tercer lugar, la implementación del código de la ordenación por inserción

La siguiente es la implementación del código java:

/**
 * 插入排序
 */
public static void algorithm5(){
 
    //原始数组
    int[] array={1,2,3,4,0,5};
    //数组的长度
    int length=array.length;
    //对数组进行遍历
    for (int i = 0; i < length; i++) {
        //第二个循环仅仅是将当前数据跟自己左边的数字进行比较,如果小于左边数字则交换位置,否则位置不变。
        for (int j = i; j > 0 && array[j]<array[j-1]; j--) {
                int temp = 0;
                temp = array[j-1];
                array[j-1]=array[j];
                array[j]=temp;
        }
    }
 
//将排好序的数组打印输出
    for (int i = 0; i < length; i++) {
        System.out.print(array[i]+",");
    }
} 

Lo anterior es la implementación del código de Java de la ordenación por inserción. El segundo bucle for en el código es el punto clave. El segundo bucle for solo compara el valor a la izquierda de los datos actuales. Si es menor que el valor de la izquierda, la posición se intercambia; de lo contrario, la posición permanece sin cambios.

3.1 Complejidad temporal de la ordenación por inserción

Hay dos tipos de complejidad de tiempo para la ordenación por inserción:

1. Cuando la matriz en sí está ordenada, como {1, 2, 3, 4, 5}, la complejidad de tiempo de usar la ordenación por inserción es O (n). Motivo: si la matriz en sí está ordenada, la ordenación por inserción debe comparar cada dos números uno al lado del otro, un total de N-1 comparaciones, por lo que la complejidad de tiempo es O (n).

2. Cuando la matriz está desordenada, necesita comparar (n ^ 2) / 2 veces en el peor de los casos, por lo que la complejidad del tiempo es O (n ^ 2).

Cuatro, resumen

Según la complejidad del tiempo de la ordenación por inserción, la ordenación por inserción es adecuada para los siguientes tipos de matrices:

1. Cada elemento de la matriz no está lejos de su posición final. Por ejemplo, {1,0,2,3,4,5}, la posición final de 0 en esta matriz debería ser la primera posición, y la posición de 0 en este momento no está lejos de la primera posición.

2. Incorpore una matriz pequeña en una matriz grande ordenada. Por ejemplo, una matriz ordenada grande {1,2,3,4,5,6} se fusiona en una matriz pequeña {0,1}.

3. Las posiciones de solo unos pocos elementos de la matriz son incorrectas.

Los tres tipos de matrices mencionados anteriormente son adecuados para el algoritmo de ordenación por inserción. Los estudiantes que han jugado mahjong, piénsenlo, el proceso de dibujar, jugar y clasificar cartas constantemente en el proceso de jugar mahjong no es solo una clase de inserción.

La clasificación es la base de los algoritmos y la clasificación tiene muchos usos. Después de leer el contenido de esta sección, es posible que desee escribir un código para clasificar las tarjetas que no necesita para ver qué algoritmo de clasificación es más adecuado.

Supongo que te gusta

Origin blog.csdn.net/GUDUzhongliang/article/details/108730979
Recomendado
Clasificación