Una breve discusión sobre el método de clasificación de Pascal libre
(1) Ordenación estable por inserción directa
(2) Ordenación estable por desmontaje y semiinserción
(3) Ordenación por inserción bidireccional - ordenación estable
(4) Ordenación por inserción de tabla - ordenación estable
(5) Ordenación en colina - ordenación inestable.
2. Clasificación rápida (intercambio): (complejidad de tiempo promedio: O (nlogn), peor caso: O (N2)): clasificación inestable.
(1) Clasificación estable por burbujas
(2) Clasificación rápida
3. Clasificación por selección: (Complejidad de tiempo promedio: O(nlogn), peor caso: O (NLOGN)) -clasificación inestable.
(1) Ordenación por selección simple
(2) Ordenación por selección de árbol
(3) Ordenación en montón ((2) Mejora de la ordenación)
4. Clasificación por fusión: (complejidad de tiempo promedio: O (nlogn), peor caso: O (nlogn))
(1) Clasificación por fusión bidireccional
5. : (complejidad de tiempo promedio: O(d(n rd)), peor caso: O(d(n rd))-clasificación estable.
Clasificación estable: la estabilidad relativa de los elementos durante el proceso de clasificación. en el que la posición no cambia se denomina clasificación estable.
Clasificación inestable: la clasificación en la que la posición relativa de los elementos cambia durante el proceso de clasificación se denomina clasificación inestable.
Primero, inserción. ordenamiento:
(1) Inserción directa:
Ejemplo: Estado inicial: (49) 38 65 97 76 13 27 *49
i=2 (38 ) ( 38 49)
i=3 (65) (38 49 65)
i=4 (97) (38 49 65 97)
i =5 (76) (38 49 65 76 97)
I = 6(13)(13 38 49 65 76 97)
i=7 (27) (13 27 38 49 65 76 97)
I = 8(49)(13 27 38 49 * 49 65 76 97)
(2)Extracción e inserción:
Ejemplo: Estado inicial: 49 38 65 97 76 13 27 *49
proc bin pass(var r: listtype;)
(3) Clasificación de inserción bidireccional: establezca dos punteros : primero: la cabeza siempre apunta al elemento más pequeño y final: la cola siempre apunta al elemento más grande.
Ejemplo: Estado inicial: 49 38 65 97 76 13 27 *49
i=1 (49)
i=2 (49) (38)
i=3 (49 65) (38)
i=4 (49 65 97) (38)
i=5 (49 65 76 97 ) (38)
i=6 (49 65 76 97) (13 38)
i=7 (49 65 76 97) (13 27 38)
i=8 (49 *49 65 76 97) (13 27 38)
(4) Clasificación Hill: (O(logn) es el mejor, O (n 2) es el peor)
p>Ejemplo: Estado inicial: 49 38 65 97 76 13 27 *49 55 04
|
| |
p>| |
| |
Resultado de clasificación único: 13 27 *49 55 04 49 38 65 97 76
| | |
| >Los resultados de tres clasificaciones: 04 13 27 38 *49 49 55 65 76 97
Fórmula de incremento:...9, 5, 3 , 2, 1
.. .40, 13, 4, 1
(5) Clasificación simple: 49 38 65 97 76 13 27 *49
38 65 13 27
38 13
El resultado de ordenar una vez es 13.
(6) Clasificación del montón:
Definición de montón: la secuencia {K1, K2,...,KN} de n elementos se llama montón si y solo si se cumple lo siguiente la relación se cumple cuando:
k(I) lt;=k(2i) o k(i)>=k(2i)
k(I) lt;=k( 2i 1) k(i)>=k(2i 1)
(7) Ordenar por fusión:
Ejemplo: Estado inicial: 49 38 65 97 76 13 27 *49 50
Clasificación de una sola pasada: (38 49) (65 97) (65 438 03 76) (27 * 49) (50)
Clasificación de dos pasadas: (38 49 65 97 ) (13 27 * 49 76) (50)
Clasificación de tres pasadas: (13 27 38 49 *49 50 65 76 97)
Pascal implementa el método de clasificación
Intercambio de procesos ( var x, y: entero);
Definir variables
temp: entero;
Inicio
temp : = x;
p>
x:= y;
y:= temp;
Fin;
/ /Clasificación de burbujas
Procedimiento BubbleSort (variable A: matriz de enteros
Definir variables
I, J, T: enteros
Inicio
De mayor a menor do
Para J: = bajo(A) a alto(A) - 1 do
si A[J] gt ;A[J 1] luego
Iniciar
intercambio(A[J],A[J 1]);
t:= A[J] ;
A[ J]:= A[J 1];
a[J 1]:= T
Fin
Fin;
//Clasificación de selección
procedimiento SelectionSort(var A: matriz de enteros);
Definir variables
I, J, T: entero;
Inicio
Para I: = Bajo(A) a Alto(A) - 1 hacer
Para J: = Alto( A) hasta I 1 do
Si A[I] gt entonces
Iniciar
Swap(A[I], A[J]);
t:= A[I];
A[I]:= A[J];
a[J]:= T;
Salir si se termina;
Fin;
Fin;
//Clasificación rápida
Proceso de clasificación rápida (variable A). : matriz de enteros);
Procedimiento QuickSortSub(var A: matriz de enteros; iLo, iHi: entero);
Definir variables
Lo, Hi, Mid, T: entero;
Inicio
lo:= iLo;
hi:= iHi;
medio:= A[(Lo Hola)div 2];
p>Repetir
Y A[Lo] lt; Mid do company (Lo);
Y A[Hola]> Mediados de diciembre (Hola);
p>
Si Lo lt Hola
Iniciar
Intercambio(A[Lo], A[Hi]) ;
t:= A[ Lo];
A[Lo]:= A[Hola];
a[Hola]:= T;
Aum(Lo);
p>
Dic(Feliz
);
Fin;
Hasta Lo gtHi;
Si Hola gtiLo entonces QuickSortSub(A,iLo,Hi);
si Lo ltiHi luego QuickSortSub(A, Lo, iHi);
Fin
Inicio
QuickSortSub(A, Bajo(A), Alto(A) )
Fin;
Pascal 2007-04-18 16:16 Programa Inssort
const max = 100
Escriba arr = Entero de matriz[0..max];
var a: arr;
I, n: entero;
fin: texto;
Proceso en sort(var r: arr; rn: integer); {algoritmo de ordenación por inserción directa}
var i, j: integer;
Inicio
For i:=2 to rn do
Inicio
r[0]:= r[I];{Almacenamiento que se insertará en la columna de vigilancia r[0] Registro }
j:= I-1;
while(r[0] lt; r[j])do {buscar posición de inserción}
Iniciar
r[j 1]:= r[j];{registro movido hacia atrás}
Décima sesión;
Fin;
r [j 1]:= r[0]; {Insertar el registro a insertar en la secuencia de clasificación}
Fin
Fin
Inicio
assign(fin, ' entrada . txt ');
reset(fin),
readln(fin, n
); para i:=1 a n lea(fin, a[I]);
escribir('antes de ordenar:');
Para i:=1 a n escriba (a[I]: 5); writeln
in sort(a, n);
write('Después de ordenar:
Para i :=1 a n escribir(a[I]:5); escribir
Cerrar(fin);
readln
Fin.
Fusionar ordenación [Pascal]
Tipo elemento = entero de matriz [0..10001];
var arrhead, arrend: longint;
n, I: longint;
a: elemento;
Proceso de fusión (var a: elemento; x, y, z: longint); >var temp1, temp 2: elemento;
longitudA, longitudB, I, j, recuento:
Inicio
Para i:=x a y; do temp 1[I-x 1]:= a[I];
Para j:=y 1 a z do temp 2[j-y]:= a[j];
longitud a: = y-x 1;
longitud b: = z-y;
I: = 1; j: = 1; cuenta: = x-1; while(i lt=longitudA) y (j lt=longitud B) hacen
Inicio
inc(count);
if temp 1[I] gt ; temp2[j] luego inicia un [count]: = temp 2[j]; Inc(j) De lo contrario, inicia un [count]: = temp 1[I]; ;Fin;
Fin;
Si gtlengthA entonces para i:=j a lengthB haga un[count i-j 1]:=temp2[i]
else for j:=i to lengthA hacer a[count j-I 1]:=temp 1[j];
Fin;
Clasificación de procesos (variable a: elemento; x, y : longint);
var mid: longint;
Inicio
mid:=(x y)div 2;
if mid lt gtx luego ordenar (a, x, mid);
Si mid 1 lt; gty luego ordenar (a, mid 1, y
merge (a, x, mid, y);
Fin;
Inicio
Leer como (n); ( a[I]);
arr head:= 1;
arrend:= n;
sort(a, arrhead, arrend); p >
Para i:=1 an n comience write(a[i], ' '); si i mod 5=0, entonces writeln termina;
Fin.
Clasificación de burbujas
Clasificación de burbujas de procedimiento (variable R: tipo de archivo)
Inicio
Para i:=1 a n-1 hacer // Realizar clasificación N-1.
no swap:= true; //Intercambiar símbolos
For j:=n-1 downto i do //Escanear de atrás hacia adelante.
Si R[j 1]. claveltR[j].
Luego presione la tecla
temp:= R[j 1];
R[j 1]:= R[j];
r[j] : = temp;
noswap:=false
endif
endfor
Si no hay intercambio, entonces // Si no se produce ningún intercambio, luego detenga el algoritmo.
Regresar;
endif
Fin
Fin;
Seleccionar ordenar directamente
Procedimiento seleccionar ordenar(var R: tipo de archivo);
Inicio
Para i:=1 a n-1 hacer
k:=I; p> p>
Para j: =i 1 an do
Si R[j]. claveltR[k]. Luego presione la tecla
k:=j
endif
endfor
Si k no es igual a I entonces // Maldita sea, No puedes usar ese símbolo, suficiente protección.
temp: R[I];
R[I]: = R[k]
r[k]: = temperatura
endif
End
End;
Implementación Pascal de clasificación de montón
//Este programa implementa un pequeño montón raíz ( Satisfacer la naturaleza de que el padre sea más pequeño que el hijo)
//Las funciones implementadas por el programa son: clasificación del montón, tomando el elemento más pequeño.
//La matriz eventualmente se ordenará en orden descendente.
const maxn = 1000;
var a: matriz[1..maxn]de entero largo
Tamaño: entero largo
I , n: longint;
Intercambio de procesos (var a, b: longint
var t: longint
Inicio
t:= a;
a:= b;
b:= t;
Fin
Inserción del proceso (x: longint);
var p: longint;
Inicio
inc(tamaño);
p:=tamaño;
Mientras (a[p div 2]>x) y (p gt1) comencemos
a[p]:= a[p div 2];
p := p div 2;
Fin
a[p] := x
Fin
Proceso montón (idx; : longint);
var l, r, bajo: longint;
Inicio
l:= 2 * idx; := 2 * idx 1;
si (a[l] lt; a[idx]) y (l lt=tamaño) entonces bajo:=l
si no, bajo:= idx
if (a[r] lt; a[low]) y (r lt=size) then low: = r;
Si idx lt gt● entonces comienza p>
intercambio(a[idx], a[bajo]);
heapfy(bajo);
Fin;
Fin; p>
p>
Función getmin: longint;
Inicio
Salir(a[1]);
Fin;
Función pop: longint;
Inicio
pop: = a[1];
a[1]: = a[tamaño];
dec(tamaño);
heap fy(1);
Fin;
Inicio
readln (n);
Tamaño: = 0;
Para i: = 1 a n hacer
Insertar(random(1000));
Para i:=1 a n hacer
a[n-I 1]:= pop;
Para i:=1 a n escribir(a[i],' ');
p>
escribir
Fin.