Entrevistador: ¿Conoce los tres algoritmos comunes de clasificación de burbujeo, inserción y selección? ¿Por qué el tipo de inserción es más popular?

El algoritmo de clasificación debería ser algo con lo que todos entremos en contacto cuando aprendan por primera vez, y debería ser el primer algoritmo que la mayoría de la gente aprenda. Hay muchos algoritmos de clasificación comunes, como clasificación de monos, clasificación de sueño, clasificación de fideos, etc. Aquí solo aprendemos los algoritmos de clasificación más comunes y clásicos.

Según la complejidad temporal del algoritmo, se puede dividir en las siguientes tres categorías: Aprendemos de la clasificación para profundizar la memoria y dominar el algoritmo.

¿Cómo analizar un "algoritmo de clasificación"?

Eficiencia de ejecución del algoritmo de clasificación

  1. Mejor caso, peor caso, complejidad del tiempo medio del caso
  2. Coeficientes de complejidad de tiempo, constantes, nivel bajo
  3. Número de comparaciones e intercambios (o movimientos)

Consumo de memoria del algoritmo de clasificación

El consumo de memoria de un algoritmo se puede medir por la complejidad del espacio, y los algoritmos de clasificación no son una excepción. Sin embargo, en vista de la complejidad espacial del algoritmo de clasificación, también introdujimos un nuevo concepto, ordenado en su lugar (Sorted in place). El algoritmo de clasificación in situ se refiere específicamente al algoritmo de clasificación cuya complejidad espacial es O (1).

Estabilidad del algoritmo de clasificación

No es suficiente medir el rendimiento de un algoritmo de clasificación solo por la eficiencia de ejecución y el consumo de memoria. Para el algoritmo de clasificación, también tenemos una métrica importante, la estabilidad. El concepto es que si hay elementos de igual valor en la secuencia a ordenar, el orden original de elementos iguales no cambiará después de la ordenación.

Déjame explicarte con un ejemplo. Por ejemplo, tenemos un conjunto de datos 2, 9, 3, 4, 8, 3, ordenados por tamaño, es 2, 3, 3, 4, 8, 9. Hay dos 3 en este conjunto de datos. Después de ordenar por un cierto algoritmo de clasificación, si el orden de los dos 3 no cambia, llamamos a este algoritmo de clasificación un algoritmo de clasificación estable; si el orden de adelante hacia atrás cambia, el algoritmo de clasificación correspondiente se llama inestable Algoritmo de clasificación.

Clasificación de burbujas (clasificación de burbujas)

La clasificación de burbujas solo funciona con dos datos adyacentes. Cada operación de burbujeo comparará dos elementos adyacentes para ver si se cumplen los requisitos de relación de tamaño. Si no están satisfechos, déjelos intercambiar. Un burbujeo moverá al menos un elemento a donde debería estar. Repita n veces para completar la clasificación de n datos.

Utilizo un ejemplo para mostrarle todo el proceso de clasificación de burbujas. Queremos ordenar un conjunto de datos 4, 5, 6, 3, 2, 1, de pequeño a grande. El proceso detallado de la primera operación de burbujeo es así:

Se puede ver que después de una operación de burbujeo, el elemento 6 se ha almacenado en la ubicación correcta. Para ordenar todos los datos, solo necesitamos realizar 6 operaciones de burbujeo como esta.

De hecho, el proceso de burbujeo que acabamos de mencionar se puede optimizar. Cuando no hay intercambio de datos para una operación de burbujeo, significa que se ha alcanzado el orden y no es necesario continuar con la operación de burbujeo posterior. Tengo otro ejemplo aquí. Solo necesita 4 operaciones de burbujeo para ordenar 6 elementos.

El principio del algoritmo de clasificación de burbujas es relativamente fácil de entender. Publicaré el código específico a continuación. Puedes combinar el código para ver el principio que mencioné anteriormente.

Tipo de inserción

Primero, dividimos los datos de la matriz en dos intervalos, un intervalo ordenado y un intervalo no ordenado. El intervalo ordenado inicial tiene solo un elemento, que es el primer elemento de la matriz. La idea central del algoritmo de inserción es tomar los elementos en el intervalo sin clasificar, encontrar una posición de inserción adecuada en el intervalo ordenado e insertarlo, y asegurarse de que los datos del intervalo ordenado estén siempre en orden. Repita este proceso hasta que los elementos en el intervalo sin clasificar estén vacíos y el algoritmo finalice.

Como se muestra en la figura, los datos que se ordenarán son 4, 5, 6, 1, 3, 2, con el intervalo ordenado a la izquierda y el intervalo sin ordenar a la derecha.

La ordenación por inserción también contiene dos operaciones, una es la comparación de elementos y la otra es el movimiento de elementos. Cuando necesitamos insertar un dato a en el intervalo ordenado, necesitamos comparar el tamaño de a con los elementos del intervalo ordenado para encontrar una posición de inserción adecuada. Después de encontrar el punto de inserción, también necesitamos mover el orden de los elementos después del punto de inserción un lugar hacia atrás, para dejar espacio para que se inserte el elemento a.

La parte del código no es difícil, como se muestra a continuación:

Tenga en cuenta que aquí se recorren los datos ordenados de principio a fin.

Seleccionar ordenar

La idea de implementación del algoritmo de clasificación por selección es similar a la clasificación por inserción y también se divide en intervalo ordenado e intervalo no ordenado. Sin embargo, la clasificación de selección encontrará el elemento más pequeño en el intervalo sin clasificar cada vez y lo colocará al final del intervalo ordenado.

También es relativamente simple, solo mira el código:

Expandir

La complejidad temporal de la clasificación de burbujas y la clasificación de inserción son ambas O (n2), y ambos son algoritmos de clasificación in situ. ¿Por qué la clasificación de inserción es más popular que la clasificación de burbujas?

Respuesta: Desde el punto de vista de la implementación del código, el intercambio de datos de la clasificación de burbujas es más complicado que el movimiento de datos de la clasificación de inserción. La clasificación de burbujas requiere 3 operaciones de asignación, mientras que la clasificación de inserción solo requiere una. Veamos esta operación:


冒泡排序中数据的交换操作:
if (a[j] > a[j+1]) { // 交换
   int tmp = a[j];
   a[j] = a[j+1];
   a[j+1] = tmp;
   flag = true;
}

插入排序中数据的移动操作:
if (a[j] > value) {
  a[j+1] = a[j];  // 数据移动
} else {
  break;
}

Contamos aproximadamente el tiempo de ejecución de una instrucción de asignación como unidad de tiempo (unit_time), y luego usamos la clasificación por burbujas y la clasificación por inserción para clasificar la misma matriz con un orden inverso de K. Con la clasificación de burbujas, se requieren K operaciones de intercambio y se requieren 3 declaraciones de asignación cada vez, por lo que el tiempo total de operación de intercambio es 3 * K unidad de tiempo. La operación de movimiento de datos en la ordenación por inserción solo requiere K unidades de tiempo.

Este es solo nuestro análisis muy teórico . Por el bien de la experimentación, escribí un programa de prueba de comparación de rendimiento para el código Java de clasificación de burbujas y clasificación de inserción anterior, generaron al azar 10,000 arreglos, cada uno con 200 datos, y luego Mi máquina utiliza algoritmos de clasificación de burbujas e inserción para ordenar. El algoritmo de clasificación de burbujas tarda unos 555 ms en ejecutarse, mientras que la clasificación por inserción solo tarda unos 115 ms en completarse .

para resumir

Para analizar y evaluar un algoritmo de clasificación, debe analizarlo desde tres aspectos: eficiencia de ejecución, consumo de memoria y estabilidad. Estos tres tipos de complejidad temporal son los algoritmos de clasificación O (n2), la clasificación de burbujas, la clasificación por inserción y la clasificación por selección.

Lectura recomendada

Recientemente entrevisté a Byte y BAT, y compilé un material de entrevista "Java Interview BAT Clearance Manual", que cubre las tecnologías centrales de Java, JVM, concurrencia de Java, SSM, microservicios, bases de datos, estructuras de datos, etc. Método de obtención: haga clic en "Viendo", siga la cuenta oficial y responda al 666 para recibir, se proporcionará más contenido uno tras otro

 

 

Supongo que te gusta

Origin blog.csdn.net/taurus_7c/article/details/105170821
Recomendado
Clasificación