Estructura de datos - Demostración animada de tipo de intercambio


prefacio

提示:本人不喜欢用专业术语来记录知识点,所以接下来会用例题+白话文的方式记录:

La idea básica de la clasificación por intercambio es comparar las claves de los registros a clasificar par por par, y si se invierte el orden de los dos registros, se intercambian los dos registros hasta que no haya registros invertidos. Los principales métodos de clasificación que aplican la idea básica de la clasificación de intercambio son la clasificación de burbujas y la clasificación rápida.


提示:以下是本篇文章正文内容,下面案例可供参考
Continuación del artículo anterior Clasificación por inserción

En segundo lugar, la orden de cambio

1. Clasificación de burbujas

Pensamiento:

Es decir, la matriz que se va a ordenar se almacena de arriba a abajo, los registros con palabras clave más pequeñas se consideran "más ligeros" y los registros con palabras clave más grandes se consideran "más pesados" (los registros con palabras clave más grandes se consideran piedras). , se hundirá; las palabras clave pequeñas se consideran burbujas de vapor de agua y flotarán hacia arriba; finalmente, las burbujas flotan, la piedra se hunde y la clasificación ha terminado)

  • Aquí hay un gif más clásico de Internet para mostrar todo el proceso de clasificación de burbujas:
    inserte la descripción de la imagen aquí

Los pasos básicos:

Por ejemplo, ahora hay ABCDE... Estos números, cuanto más son las palabras clave, más grandes
son, están desordenadas de arriba a abajo al principio, y se comparan dos comparaciones adyacentes, es decir, comparaciones por pares. Si el grande está arriba y el pequeño abajo, cámbialo hasta que el grande esté abajo y el pequeño arriba.
inserte la descripción de la imagen aquí

sección de código

public void bubbleSort() {
    
    
	RecordNode temp;		//辅助结点
	boolean flag = true;    // 是否交换的标记
	for (int i = 1; i< this.curlen && flag; i++){
    
      //有交换时再进行下一趟,最多n-1趟
		flag = false;	//记录未交换
		for(int j = 0; j<this.curlen - i; j++){
    
      	//一次比较、交换
		if (r[j].key.compareTo(r[j + 1].key) > 0){
    
         //逆序时,交换
             temp = r[j];
             r[j] = r[j + 1];
             r[j + 1] = temp;
             flag = true;	//记录交换
           }                    
       } 
    }
}

ejemplo:

Suponiendo que la secuencia de palabras clave de los 8 registros que se ordenarán es { 52, 39, 67, 95, 70, 8, 25, 52 }, el proceso de clasificación de burbujas se muestra en la siguiente figura.
Método de dibujo 1:
inserte la descripción de la imagen aquí
Método de dibujo 2:
inserte la descripción de la imagen aquí
Pasos:
El primer paso: Se comparan los subíndices 0 y 1, se comparan 1 y 2, se comparan 2 y 3, y se comparan 3 y 4. . . . . . Los pequeños están en la parte superior y los grandes están en el
segundo y tercer viaje. . . Por analogía
, la línea de puntos a continuación ya está dispuesta y ordenada, y no se requiere ninguna otra disposición.

análisis de rendimiento

(1), complejidad temporal:
O(n 2 )

(2), el espacio auxiliar requerido:
solo un espacio auxiliar de registro O (1)

(3) Estabilidad del algoritmo:
es un método de clasificación estable

2. Clasificación rápida (con el elemento 0 como pivote)

Pensamiento:

Divida los registros a clasificar en dos partes independientes por una clasificación, y el valor clave de todos los registros en una parte es menor que el valor clave de todos los registros en la otra parte. Clasificación, todo el proceso de clasificación se puede realizar de forma recursiva, por lo que que toda la secuencia de registro se ordena.

Primero busque un registro y use su palabra clave como "pivote". Todos los registros cuya palabra clave sea menor que el pivote se moverán a la izquierda y viceversa, todos los registros cuya palabra clave sea mayor que el pivote se moverán a la derecha.

  • Aquí hay un gif de excavación más clásico en Internet para mostrar todo el proceso de clasificación rápida:

Primero configure el primer bit como la posición de pit, que es el pivote que se discutirá a continuación, y luego la posición de pit no se mueve. Si la tecla está en el extremo izquierdo, el puntero R en el otro extremo comienza - - hasta que un valor más pequeño que la clave, si lo encuentra, cubrirá el hoyo, y luego se convertirá en un nuevo hoyo, y atravesará la L izquierda nuevamente para comenzar + + hasta que encuentre un valor mayor que la clave. cubrirás el hoyo, y luego te convertirás en un nuevo hoyo. Bit, luego vuelve a R para comenzar de nuevo, y así sucesivamente, hasta que L y R estén en el mismo hoyo, pon el primer número establecido al principio. y se completa la clasificación.
inserte la descripción de la imagen aquí

sección de código

int Partition ( int i, int j) {
    
    
	RecordNode pivot = r[i]; 	// 将第1个记录作为枢轴  
	while (i<j) {
    
    	//从表两端交替向中间扫描
		while(i<j && pivot.key.compareTo(r[j].key) <=0{
    
    
      		j--;      // 从右向左搜索
		if (i<j) {
    
    
		    r[i] = r[j];	//将比枢轴记录关键字值小的记录向前移动到下标为 i 的位置上
		      i++;
		      }
		while (i<j && pivot.key.compareTo(r[i].key)>0){
    
    
        	i++;      // 从左向右搜索
		if (i<j)  {
    
    
			r[j] = r[i];	//将比枢轴记录关键字值大的记录向后移动到下标为 j 的位置上
			   j--;
			   }
		}
	r[i] = pivot;	//枢轴记录到位	
	     return i;	//返回枢轴位置
}	// Partition         

Ejemplo uno:

52 49 80 36 14 58 61 97 23 75 Una solución
de clasificación rápida : Pasos: primero configure el primer número 52 como el pivote y compare r[j].getKey () con la palabra clave pivote de atrás hacia en esta pregunta, mira la comparación entre 75 y 52, el más grande está a la derecha, porque el 75 es más grande que el 52, así que no te muevas, porque el 75 mismo está en el a la derecha, y luego j se reduce Resta Esta vez, 23 es más pequeño que 52, por lo que debe intercambiarse, asignarse a la posición de i, buscarse desde la izquierda y luego debe agregarse i. Compare r[i]. key con la palabra clave pivote y solicite r[i].key ≤ pivot key. i ++ llega a 49, 49 es más pequeño que 52, 49 está justo a la izquierda, no es necesario cambiar, luego añado i ++ a la posición de 80, 80 es más grande que 52, asígnelo a esta posición de j y luego Disminuya j, vaya a la posición de 97, 97 es mayor que 52, no necesita moverse, luego disminuya y disminuya j nuevamente, a la posición de 61, 61 es mayor que 52, no necesita moverse, luego disminuya y disminuya j nuevamente, a la posición de 58, 58 es mejor que 52 es más grande, por lo que no es necesario cambiarlo, y luego j se resta nuevamente, hasta que se encuentra un j - - más pequeño que el pivote 52 para llegar a 14, 14 es más pequeño que 52, esta vez necesita cambiar 14 a la posición de i y cambiarlo a la izquierda, agregue i a la posición de 36, 36 es más pequeño que 52, no es necesario cambiar

inserte la descripción de la imagen aquí





inserte la descripción de la imagen aquí



inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí


inserte la descripción de la imagen aquí


inserte la descripción de la imagen aquí
Luego agregue i y encuentre que i y j apuntan al mismo número, que es igual. Cuando i y j son iguales
, se encuentra que se encuentra la posición de 52 en toda la clasificación.
Podemos encontrar que el valor a la izquierda de 52 es menor que 52. Los valores a la derecha de 52 son todos mayores que 52
inserte la descripción de la imagen aquí

Ejemplo dos:

Escriba el resultado de la primera pasada de clasificación rápida para la secuencia de palabras clave
{ 39 , 2, 12, 40, 34, 33, 50, 1, 55, 60} : Pasos: primero tome el pivote: 39 (el primero), y luego defina dos variables i, j, i a la izquierda, j a la derecha, y luego encuentre de atrás hacia adelante, 60 es mayor que 39, no importa, 55 es mayor que 39, no importa , y luego vaya a la posición 1, 1 es mayor que 39 Pequeño 1 va a la posición de i a la izquierda aquí a i ++ a la izquierda, encuentre el mayor que 39 y cámbielo a la derecha 2 es más pequeño que 39, no necesita moverse 12 es más pequeño que 39, no necesita moverse hasta la posición de 40, si es más grande que 39, cambie 40 a La posición de j Esta es la posición de j, y luego vaya a j - - Encuentra 50 más pequeños que 39 y más grandes que 39, no te muevas, luego apunta a 33, si es más pequeño que 39, cambia 33 a la posición de i y ve a i nuevamente Edge, i++ encuentra más grande que 39, muévete a la posición j, 34 es más pequeño que 39, no te muevas. Al señalar 33, i y j son iguales, por lo que esta posición es la posición del pivote. Finalmente, se encuentra que el número de la izquierda es más pequeño que 39. ; el dígito de la derecha es mayor que 39


inserte la descripción de la imagen aquí


inserte la descripción de la imagen aquí





inserte la descripción de la imagen aquí





inserte la descripción de la imagen aquí




inserte la descripción de la imagen aquí





inserte la descripción de la imagen aquí

análisis de rendimiento

(1), complejidad de tiempo:
O(nlog 2 n)

(2), el espacio auxiliar requerido:
O(log 2 n)

(3) Estabilidad del algoritmo:
es un método de clasificación inestable

Resumir

Ordenamiento de burbuja

La ordenación de burbujas es bastante simple, es comparar dos por dos, y luego el número más grande está debajo/detrás, y el número más pequeño está arriba/delante.

ordenación rápida

Primero tome el primer número del pivote, luego tome dos variables i y j, i es 0, j es la longitud de la matriz menos uno
y luego comience desde j para buscar hacia adelante, encuentre un número más pequeño que el pivote e intercámbielo. a la izquierda posición i,
luego i ++, mira a la derecha, hasta que encuentres un número más grande que el pivote, cambia a la posición j
a la derecha a la posición derecha, j - -, encuentra un número más pequeño que el pivote , cámbielo a la izquierda justo ahora La posición de i,
esta vez a la izquierda, i ++, y luego a la derecha, hasta que encuentre un número más grande que el pivote, cámbielo a la posición de j a la derecha
hasta que i y j son iguales, la posición igual es la posición del pivote
Finalmente, la secuencia de la izquierda es más pequeña que el pivote, la secuencia de la derecha es más grande que el pivote

Supongo que te gusta

Origin blog.csdn.net/rej177/article/details/124329753
Recomendado
Clasificación