Red de conocimiento informático - Conocimiento de la instalación - En cuanto a los algoritmos de emparejamiento y clasificación, ¡los expertos pueden ayudar!

En cuanto a los algoritmos de emparejamiento y clasificación, ¡los expertos pueden ayudar!

I. Ordenación por inserción

1. Idea básica:

Cada vez que un elemento de datos a ordenar se inserta en la matriz en una posición apropiada que se haya ordenado antes, de modo que la matriz Permanece ordenado hasta que se hayan insertado todos los elementos de datos a ordenar.

2. Proceso de clasificación:

Ejemplo:

[palabra clave inicial] [49] 38 65 97 76 13 27 49

J =2 (38) [38 49] 65 97 76 13 27 49

J=3 (65) [38 49 65] 97 76 13 27 49

J=4 ( 97 ) [38 49 65 97] 76 13 27 49

J=5(76) [38 49 65 76 97] 13 27 49

J=6(13) [13 38 49 65 76 97] 27 49

J=7(27) [13 27 38 49 65 76 97] 49

J=8( 49) [13 27 38 49 49 65 76 97]

Programa InsertSort(Var R: tipo de archivo);

//La clasificación por inserción R[1..N] se incrementa, R[0] es un perro guardián/ /

Inicio

para I := 2 Para N Hacer //Insertar R[2],....,R[n]//

comenzar

R[0] := R[I]; J := I - 1;

Mientras que R[0] < R[J] Hacer //Buscar R[I ] posición de inserción //

comenzar

R[J+1]:= R[J] //Mover elementos mayores que R[I] hacia atrás//

J := J - 1

fin

R[J + 1] := R[0] //Insertar R[I] //

end

End; //InsertSort //

II. Ordenación por selección

1. Idea básica:

En cada pasada , se selecciona el elemento más pequeño (o más grande) de los elementos de datos que se van a ordenar y el orden se coloca al final de la matriz ordenada hasta que se van a ordenar todos los elementos de datos.

2. Proceso de clasificación:

Ejemplo:

Palabra clave inicial [49 38 65 97 76 13 27 49]

Primero Después de segunda clasificación 13 [38 65 97 76 49 27 49]

Después de la segunda clasificación 13 27 [65 97 76 49 38 49]

Después de la tercera clasificación 13 27 38 [97 76 49 65 49]

Después de la cuarta clasificación 13 27 38 49 [49 97 65 76]

Después de la quinta clasificación 13 27 38 49 [97 97 76]

Después de la sexta clasificación, 13 27 38 49 49 76 [76 97]

Después de la séptima clasificación, 13 27 38 49 49 76 76 [ 97]

Resultado final de la clasificación 13 27 38 49 49 76 76 97

Procedimiento SelectSort(Var R: tipo de archivo); //Emparejar R[1..N] //

Inicio

para I := 1 Para N - 1 Hacer //Realizar clasificación de selección N - 1 //

comenzar

K := I;

Para J := I + 1 To N Do //Seleccione el área desordenada actual R[I..N] //

comenzar

Si R[J] < R[K] Entonces K := J

end;

Si K <>; Entonces // intercambia R[I] y R[K] //

comienza Temp := R[I]; R[I] := R[K]; R[K] := Temp; fin;

fin

Fin ;

3. Clasificación de burbujas (BubbleSort)

1. Idea básica:

Compare el tamaño de los elementos de datos que se ordenarán por pares, cuando dos elementos de datos en Si se encuentran datos en orden opuesto, se intercambian hasta que no queden más elementos de datos en orden opuesto.

2. Proceso de clasificación:

Imagínese que la matriz ordenada R [1...N] es vertical y vertical, y cada elemento de datos actúa como una burbuja ponderada. burbuja de luz, no puede estar en De acuerdo con el principio de burbujas pesadas, la matriz R se escanea de abajo hacia arriba. Siempre que el lugar escaneado viole el principio de burbujas de luz, se hace "flotar" hacia arriba. Las dos últimas burbujas son la más ligera en la parte superior y la más pesada en la parte inferior hasta. p>13 76 97 65 65 65 65 65 65 65

27 27 76 97 76 76 76 76 76 76

49 49 49 49 76 97 97 97 97 97 97 97 97 97 97 97 97 97 97

Procedimiento BubbleSort(Var R : FileType) // Ordenación de burbujas que escanea desde abajo hacia arriba //

Comenzar

Para I:= 1 A N-1 Hacer // Ordenar N-1 veces //

Iniciar

NoSwap:= True //Colocar la bandera sin clasificar //

For J := N - 1 DownTo 1 Do //Escanear de abajo hacia arriba //

Iniciar

If R[Var R : FileType] //Escanear desde abajo arriba Escanear hacia arriba.

p>

Si R[J+1] < R[J] Entonces // Intercambiar elementos //

comenzar

Temp := R[J+ 1 ]; R[J+1 := R[J]; R[J] := Temp;

NoSwap := Falso

fin;

fin ;

Si NoSwap Then Return// No se produce ningún intercambio en esta clasificación, finaliza el algoritmo //

end

End //BubbleSort//< / p>

4. Clasificación rápida

1. Idea básica:

Tome cualquier elemento de datos en el área desordenada actual R[1...H] como comparación. línea de base" (puede registrarse como X), que divide el área desordenada actual en dos áreas desordenadas más pequeñas a la izquierda y a la derecha: R[1...I-1] y R[I+1...H ], y los elementos de datos de la subregión desordenada de la izquierda son menores o iguales que el elemento de referencia, los elementos de datos de la subregión desordenada de la derecha son mayores o iguales que el elemento de referencia, la referencia X se encuentra en la posición de clasificación final , es decir, la posición de clasificación final de la referencia [1...I-1]≤X.Key≤R[I+1...H] (1 ≤ I ≤ H), cuando R[1... I-1] y R[I+1 ..H] no están vacíos, se someterán al proceso de partición anterior hasta que se ordenen todos los elementos de datos en la subregión desordenada.

2. Proceso de clasificación:

Ejemplo:

Palabra clave inicial [49 38 65 97 76 13 27 49]

Primero Después de segundo intercambio [27 38 65 97 76 13 49 49]

Después del segundo intercambio [27 38 49 97 76 13 65 49]

J escanea a la izquierda.

La posición permanece sin cambios, después del tercer intercambio [27 38 13 97 76 49 65 49]

Escaneo hacia la derecha, la posición permanece sin cambios, después del cuarto intercambio [27 38 13 49 76 97 65 49 ]

J scan left [27 38 13 49 76 97 65 49]

(un proceso de segmentación)

Palabra clave inicial 𢁟[27 38 49 38 65 97 76 13 27 49]

Después de una clasificación [27 38 13] 49 [76 97 65 49]

Después de dos clasificaciones 13] 27 [38] 49 [49 65] 76 〔 97〕

Después de tres clasificaciones 13 27 38 49 49 〔65〕 76 97

El resultado final de la clasificación es 13 27 38 49 49 65 76 97

Estado después de cada clasificación

Procesar partición(Var R: FileType; L, H: Integer; Var I: Integer);

/Área desordenada R[1,H ] Realizar partición, I da el resultado de esta partición I da la posición del elemento de referencia colocado después de esta partición //

Begin

I := 1; I] ;//Inicialización, basada en J) Do

comenzar

J := J - 1 //Escanea de derecha a izquierda y encuentra el primer elemento menor que X //

Si < J Entonces // He encontrado R[J] 〈X///

comenzar

R[I] := R[J] ; // Equivale a intercambiar R [I] y R[J]//

I := I + 1

I := I + 1

I := I + 1. p> fin;

Mientras (R[I] <= X) Y (I < J) Hacer

I := I + 1 // Escanee de izquierda a derecha y encuentre el primer elemento mayor que X ///

end;

Si I < J Entonces // he encontrado R[I] >;

comenzar R[J] := R[I]; // Equivale a intercambiar R[I] y R[J] //

J := J - 1

end

Hasta I = J;

R[I] := X //Se ha determinado el punto de referencia X