Clasificación del algoritmo de clasificación de estabilidad e inestabilidad

      Probé varias pruebas escritas en los últimos días y encontré un problema con la estabilidad de los algoritmos de clasificación comunes. A menudo elijo varias opciones. No es una pregunta fácil para mí y mis compañeros de clase que no están seguros. Por supuesto Si ha recordado qué libro de estructura de datos es estable y cuál no antes de la prueba escrita, debería ser fácil de hacer. Este artículo es para personas que no pueden recordar esto o quieren entender realmente por qué es estable o inestable.

      En primer lugar, todo el mundo debería conocer la estabilidad del algoritmo de clasificación, que, en términos sencillos, puede garantizar que los dos primeros números iguales en la secuencia de clasificación tengan el mismo orden de posiciones antes y después de la clasificación. En una formalización simple, si Ai = Aj, Ai estaba originalmente al frente de la posición, después de clasificar, Ai todavía tiene que estar antes de la posición de Aj.

      En segundo lugar, hable sobre los beneficios de la estabilidad. Si el algoritmo de clasificación es estable, ordene desde una clave y luego ordene desde otra clave. El resultado de la primera clasificación de clave se puede utilizar para la segunda clasificación de clave. La clasificación de cardinalidad es así, primero clasificando por orden inferior y ordenando sucesivamente por orden superior. Los elementos con el mismo orden inferior no cambiarán cuando su orden sea el mismo en el orden superior. Además, si el algoritmo de clasificación es estable, el número de intercambios de elementos puede ser menor para un algoritmo de clasificación basado en comparación (sentimiento personal, sin confirmación).

Volviendo al tema, ahora analice la estabilidad de los algoritmos de clasificación comunes, cada uno con una razón simple.

(1) Tipo de burbuja

La clasificación de burbujas consiste en ajustar elementos pequeños hacia adelante o ajustar elementos grandes hacia atrás. La comparación es la comparación de dos elementos adyacentes, y el intercambio también ocurre entre estos dos elementos. Por lo tanto, si dos elementos son iguales, creo que no los intercambiará de manera aburrida; si dos elementos iguales no son adyacentes, entonces incluso si los dos elementos son adyacentes entre sí a través del intercambio anterior de dos por dos, esto No hay intercambio en ese momento, por lo que el orden de los mismos elementos no cambia, por lo que la clasificación de burbujas es un algoritmo de clasificación estable.

(2) Orden de selección

La clasificación por selección consiste en elegir el elemento más pequeño para cada posición, por ejemplo, elegir el más pequeño para la primera posición, elegir el segundo más pequeño para el segundo elemento entre los elementos restantes, y así sucesivamente, hasta el elemento n-1, el primero No es necesario seleccionar n elementos, porque solo queda el elemento más grande. Luego, en una selección, si el elemento actual es más pequeño que un elemento, y el elemento más pequeño aparece detrás de un elemento igual al elemento actual, la estabilidad después del intercambio se destruye. Más delicioso, por ejemplo, la secuencia 5 8 5 2 9. Sabemos que al seleccionar el primer elemento 5 en la primera pasada se intercambiará con 2, luego se destruirá el orden relativo de los dos 5 en la secuencia original, por lo que el orden de selección no es Un algoritmo de clasificación estable.

(3) ordenación por inserción La ordenación por
inserción se basa en una pequeña secuencia ya ordenada en un primer elemento de inserción. Por supuesto, al principio esta pequeña secuencia ordenada tiene un solo elemento, que es el primer elemento. La comparación comienza desde el final de la secuencia ordenada, es decir, se compara el elemento que se desea insertar con el más grande que se ha ordenado. Si es mayor, se insertará directamente detrás de él, de lo contrario se buscará hacia adelante hasta encontrar el que se debe insertar. posición. Si encuentra uno que es igual al elemento insertado, entonces el elemento insertado coloca el elemento que desea insertar después del elemento igual. Por lo tanto, el orden de los elementos iguales no ha cambiado y el orden de la secuencia desordenada original es el orden después de la clasificación, por lo que la clasificación de inserción es estable.

(4) clasificación rápida clasificación
rápida en dos direcciones, el subíndice i se ha dejado de inmediato, cuando un [i] <= a [ center_index], donde el subíndice center_index es el elemento central de la matriz, la matriz generalmente se toma como 0 Elementos. Y el subíndice j de la derecha va completamente a la izquierda, cuando a [j]> a [center_index]. Si i y j no se pueden mover, i <= j, intercambie a [i] y a [j], repita el proceso anterior hasta que i> j. Cambie un [j] y un [center_index] para completar una clasificación rápida. Cuando se intercambian el elemento central y a [j], es muy posible que se interrumpa la estabilidad del elemento anterior. Por ejemplo, la secuencia es 5 3 3 4 3 8 9 10 11, y ahora los elementos centrales 5 y 3 (el quinto elemento, Los subíndices comienzan en 1) El intercambio interrumpirá la estabilidad del elemento 3, por lo que la ordenación rápida es un algoritmo de ordenación inestable, y la inestabilidad se produce en el momento en que se intercambian el elemento central y a [j].

(5) fusionar clasificación
fusionar clasificación es dividir recursivamente en una secuencia de secuencia corta, la recursividad de secuencia corta es solo un elemento de salida (que se ordenó directamente) o 2 secuencias (comparar e intercambiar 1), luego el segmento respectivo ordenado Las secuencias se fusionan en una secuencia larga ordenada y continúan fusionándose hasta que la secuencia original está ordenada. Se puede encontrar que cuando hay 1 o 2 elementos, un elemento no se intercambiará, y si los dos elementos son iguales en tamaño, nadie lo intercambia deliberadamente, esto no destruirá la estabilidad. Entonces, en el proceso de fusionar secuencias ordenadas cortas, ¿se daña la estabilidad? No, durante el proceso de fusión, podemos garantizar que si los dos elementos actuales son iguales, guardamos los elementos en la secuencia anterior delante de la secuencia de resultados, lo que asegura la estabilidad. Por lo tanto, la ordenación por combinación también es un algoritmo de ordenación estable.

(6) clasificación de radix La clasificación de
radix está de acuerdo con la clasificación baja primero y luego recopilada; luego clasificada según alta y luego recopilada; y así sucesivamente hasta la posición más alta. A veces, algunos atributos tienen un orden de prioridad, primero ordenados por prioridad baja, luego ordenados por prioridad alta, el orden final es prioridad alta primero, prioridad baja con la misma prioridad alta primero. La clasificación por cardinalidad se basa en la clasificación por separado y la recopilación por separado, por lo que es un algoritmo de clasificación estable.

(7) Clasificación de colinas (shell)
La clasificación de colinas es el tipo de inserción de elementos según la longitud asincrónica. Cuando los elementos están muy desordenados al principio, el tamaño del paso es el más grande, por lo que el número de elementos para la clasificación de inserción es pequeño y la velocidad es muy rápida ; Cuando los elementos están básicamente ordenados y el tamaño del paso es pequeño, la ordenación por inserción es muy eficiente para secuencias ordenadas. Por lo tanto, la complejidad temporal de la clasificación Hill será mejor que O (n ^ 2). Debido a los distintos tipos de inserción, sabemos que un tipo de inserción es estable y no cambiará el orden relativo de los mismos elementos. Sin embargo, en diferentes procesos de clasificación de inserción, los mismos elementos pueden moverse en sus respectivos tipos de inserción y, finalmente, su estabilidad será Interrumpido, por lo que el tipo de caparazón es inestable.

(8) ordenación del montón
sabemos que la estructura del montón es un nodo hijo i es 2 * i y 2 * i + 1 nodos, la pila superior grande requiere que el nodo principal sea mayor que igual a dos nodos secundarios, la pila superior pequeña requiere que los padres sean menores que igual a 2 Nodos secundarios. En una secuencia de longitud n, el proceso de clasificación del montón es elegir el más grande (montón superior grande) o el más pequeño (montón superior pequeño) de n / 2 y sus nodos secundarios con 3 valores, la elección entre estos 3 elementos Por supuesto, no destruirá la estabilidad. Pero al seleccionar elementos para n / 2-1, n / 2-2, ... 1 nodos principales, se destruirá la estabilidad. Es posible que el n / 2-th nodo padre intercambie el siguiente elemento y el n / 2-1o nodo padre no intercambie el mismo elemento. Entonces la estabilidad entre estos dos mismos elementos es Fue destruido. Por lo tanto, la ordenación del montón no es un algoritmo de ordenación estable.

En resumen, se concluye que la clasificación por selección, la clasificación rápida, la clasificación Hill y la clasificación por montones no son algoritmos de clasificación estables, mientras que la clasificación por burbujas, la clasificación por inserción, la clasificación por fusión y la clasificación por radix son algoritmos de clasificación estables.

Supongo que te gusta

Origin blog.csdn.net/kerwinJu/article/details/78675624
Recomendado
Clasificación